You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
725 B
29 lines
725 B
/** |
|
* An abstraction for slicing an arraybuffer even when |
|
* ArrayBuffer.prototype.slice is not supported |
|
* |
|
* @api public |
|
*/ |
|
|
|
module.exports = function(arraybuffer, start, end) { |
|
var bytes = arraybuffer.byteLength; |
|
start = start || 0; |
|
end = end || bytes; |
|
|
|
if (arraybuffer.slice) { return arraybuffer.slice(start, end); } |
|
|
|
if (start < 0) { start += bytes; } |
|
if (end < 0) { end += bytes; } |
|
if (end > bytes) { end = bytes; } |
|
|
|
if (start >= bytes || start >= end || bytes === 0) { |
|
return new ArrayBuffer(0); |
|
} |
|
|
|
var abv = new Uint8Array(arraybuffer); |
|
var result = new Uint8Array(end - start); |
|
for (var i = start, ii = 0; i < end; i++, ii++) { |
|
result[ii] = abv[i]; |
|
} |
|
return result.buffer; |
|
};
|
|
|