| /** |
| * 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; |
| }; |