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