mirror of
https://github.com/titanscouting/tra-analysis.git
synced 2025-03-13 00:55:48 +00:00
74 lines
3.1 KiB
JavaScript
74 lines
3.1 KiB
JavaScript
|
/**
|
||
|
* Creates a copy of this ByteBuffer's contents. Contents are the bytes between {@link ByteBuffer#offset} and
|
||
|
* {@link ByteBuffer#limit}.
|
||
|
* @param {number=} begin Begin offset, defaults to {@link ByteBuffer#offset}.
|
||
|
* @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.
|
||
|
* @returns {!ByteBuffer} Copy
|
||
|
* @expose
|
||
|
*/
|
||
|
ByteBufferPrototype.copy = function(begin, end) {
|
||
|
if (typeof begin === 'undefined') begin = this.offset;
|
||
|
if (typeof end === 'undefined') end = this.limit;
|
||
|
if (!this.noAssert) {
|
||
|
//? ASSERT_RANGE();
|
||
|
}
|
||
|
if (begin === end)
|
||
|
return new ByteBuffer(0, this.littleEndian, this.noAssert);
|
||
|
var capacity = end - begin,
|
||
|
bb = new ByteBuffer(capacity, this.littleEndian, this.noAssert);
|
||
|
bb.offset = 0;
|
||
|
bb.limit = capacity;
|
||
|
if (bb.markedOffset >= 0) bb.markedOffset -= begin;
|
||
|
this.copyTo(bb, 0, begin, end);
|
||
|
return bb;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Copies this ByteBuffer's contents to another ByteBuffer. Contents are the bytes between {@link ByteBuffer#offset} and
|
||
|
* {@link ByteBuffer#limit}.
|
||
|
* @param {!ByteBuffer} target Target ByteBuffer
|
||
|
* @param {number=} targetOffset Offset to copy to. Will use and increase the target's {@link ByteBuffer#offset}
|
||
|
* by the number of bytes copied if omitted.
|
||
|
* @param {number=} sourceOffset Offset to start copying from. Will use and increase {@link ByteBuffer#offset} by the
|
||
|
* number of bytes copied if omitted.
|
||
|
* @param {number=} sourceLimit Offset to end copying from, defaults to {@link ByteBuffer#limit}
|
||
|
* @returns {!ByteBuffer} this
|
||
|
* @expose
|
||
|
*/
|
||
|
ByteBufferPrototype.copyTo = function(target, targetOffset, sourceOffset, sourceLimit) {
|
||
|
var relative,
|
||
|
targetRelative;
|
||
|
if (!this.noAssert) {
|
||
|
if (!ByteBuffer.isByteBuffer(target))
|
||
|
throw TypeError("Illegal target: Not a ByteBuffer");
|
||
|
}
|
||
|
targetOffset = (targetRelative = typeof targetOffset === 'undefined') ? target.offset : targetOffset | 0;
|
||
|
sourceOffset = (relative = typeof sourceOffset === 'undefined') ? this.offset : sourceOffset | 0;
|
||
|
sourceLimit = typeof sourceLimit === 'undefined' ? this.limit : sourceLimit | 0;
|
||
|
|
||
|
//? var TARGET_CAPACITY = NODE ? 'target.buffer.length' : 'target.buffer.byteLength';
|
||
|
if (targetOffset < 0 || targetOffset > /*?= TARGET_CAPACITY */)
|
||
|
throw RangeError("Illegal target range: 0 <= "+targetOffset+" <= "+/*?= TARGET_CAPACITY */);
|
||
|
if (sourceOffset < 0 || sourceLimit > /*?= CAPACITY */)
|
||
|
throw RangeError("Illegal source range: 0 <= "+sourceOffset+" <= "+/*?= CAPACITY */);
|
||
|
|
||
|
var len = sourceLimit - sourceOffset;
|
||
|
if (len === 0)
|
||
|
return target; // Nothing to copy
|
||
|
|
||
|
target.ensureCapacity(targetOffset + len);
|
||
|
|
||
|
//? if (NODE)
|
||
|
this.buffer.copy(target.buffer, targetOffset, sourceOffset, sourceLimit);
|
||
|
//? else if (DATAVIEW)
|
||
|
new Uint8Array(target.buffer).set(new Uint8Array(this.buffer).subarray(sourceOffset, sourceLimit), targetOffset);
|
||
|
//? else
|
||
|
target.view.set(this.view.subarray(sourceOffset, sourceLimit), targetOffset);
|
||
|
|
||
|
if (relative) this.offset += len;
|
||
|
if (targetRelative) target.offset += len;
|
||
|
|
||
|
return this;
|
||
|
};
|
||
|
|