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.
86 lines
2.2 KiB
86 lines
2.2 KiB
// bufferish-proto.js |
|
|
|
/* jshint eqnull:true */ |
|
|
|
var BufferLite = require("./buffer-lite"); |
|
|
|
exports.copy = copy; |
|
exports.slice = slice; |
|
exports.toString = toString; |
|
exports.write = gen("write"); |
|
|
|
var Bufferish = require("./bufferish"); |
|
var Buffer = Bufferish.global; |
|
|
|
var isBufferShim = Bufferish.hasBuffer && ("TYPED_ARRAY_SUPPORT" in Buffer); |
|
var brokenTypedArray = isBufferShim && !Buffer.TYPED_ARRAY_SUPPORT; |
|
|
|
/** |
|
* @param target {Buffer|Uint8Array|Array} |
|
* @param [targetStart] {Number} |
|
* @param [start] {Number} |
|
* @param [end] {Number} |
|
* @returns {Buffer|Uint8Array|Array} |
|
*/ |
|
|
|
function copy(target, targetStart, start, end) { |
|
var thisIsBuffer = Bufferish.isBuffer(this); |
|
var targetIsBuffer = Bufferish.isBuffer(target); |
|
if (thisIsBuffer && targetIsBuffer) { |
|
// Buffer to Buffer |
|
return this.copy(target, targetStart, start, end); |
|
} else if (!brokenTypedArray && !thisIsBuffer && !targetIsBuffer && |
|
Bufferish.isView(this) && Bufferish.isView(target)) { |
|
// Uint8Array to Uint8Array (except for minor some browsers) |
|
var buffer = (start || end != null) ? slice.call(this, start, end) : this; |
|
target.set(buffer, targetStart); |
|
return buffer.length; |
|
} else { |
|
// other cases |
|
return BufferLite.copy.call(this, target, targetStart, start, end); |
|
} |
|
} |
|
|
|
/** |
|
* @param [start] {Number} |
|
* @param [end] {Number} |
|
* @returns {Buffer|Uint8Array|Array} |
|
*/ |
|
|
|
function slice(start, end) { |
|
// for Buffer, Uint8Array (except for minor some browsers) and Array |
|
var f = this.slice || (!brokenTypedArray && this.subarray); |
|
if (f) return f.call(this, start, end); |
|
|
|
// Uint8Array (for minor some browsers) |
|
var target = Bufferish.alloc.call(this, end - start); |
|
copy.call(this, target, 0, start, end); |
|
return target; |
|
} |
|
|
|
/** |
|
* Buffer.prototype.toString() |
|
* |
|
* @param [encoding] {String} ignored |
|
* @param [start] {Number} |
|
* @param [end] {Number} |
|
* @returns {String} |
|
*/ |
|
|
|
function toString(encoding, start, end) { |
|
var f = (!isBufferShim && Bufferish.isBuffer(this)) ? this.toString : BufferLite.toString; |
|
return f.apply(this, arguments); |
|
} |
|
|
|
/** |
|
* @private |
|
*/ |
|
|
|
function gen(method) { |
|
return wrap; |
|
|
|
function wrap() { |
|
var f = this[method] || BufferLite[method]; |
|
return f.apply(this, arguments); |
|
} |
|
}
|
|
|