buffer: add buf.toArrayBuffer() API
This commit is contained in:
parent
fe0bf6b7ac
commit
8a295cd520
@ -671,6 +671,10 @@ buffer.
|
|||||||
var b = new Buffer(50);
|
var b = new Buffer(50);
|
||||||
b.fill("h");
|
b.fill("h");
|
||||||
|
|
||||||
|
### buf.toArrayBuffer()
|
||||||
|
|
||||||
|
Creates a new `ArrayBuffer` with the copied memory of the buffer instance.
|
||||||
|
|
||||||
## buffer.INSPECT_MAX_BYTES
|
## buffer.INSPECT_MAX_BYTES
|
||||||
|
|
||||||
* Number, Default: 50
|
* Number, Default: 50
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
namespace node {
|
namespace node {
|
||||||
namespace Buffer {
|
namespace Buffer {
|
||||||
|
|
||||||
|
using v8::ArrayBuffer;
|
||||||
using v8::Context;
|
using v8::Context;
|
||||||
using v8::Function;
|
using v8::Function;
|
||||||
using v8::FunctionCallbackInfo;
|
using v8::FunctionCallbackInfo;
|
||||||
@ -550,6 +551,25 @@ void WriteDoubleBE(const FunctionCallbackInfo<Value>& args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ToArrayBuffer(const FunctionCallbackInfo<Value>& args) {
|
||||||
|
HandleScope scope(node_isolate);
|
||||||
|
|
||||||
|
ARGS_THIS(args.This());
|
||||||
|
void* adata = malloc(obj_length);
|
||||||
|
|
||||||
|
if (adata == NULL) {
|
||||||
|
FatalError("node::Buffer::ToArrayBuffer("
|
||||||
|
"const FunctionCallbackInfo<v8::Value>&)",
|
||||||
|
"Out Of Memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(adata, obj_data, obj_length);
|
||||||
|
|
||||||
|
Local<ArrayBuffer> abuf = ArrayBuffer::New(adata, obj_length);
|
||||||
|
args.GetReturnValue().Set(abuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ByteLength(const FunctionCallbackInfo<Value> &args) {
|
void ByteLength(const FunctionCallbackInfo<Value> &args) {
|
||||||
HandleScope scope(node_isolate);
|
HandleScope scope(node_isolate);
|
||||||
|
|
||||||
@ -604,6 +624,8 @@ void SetupBufferJS(const FunctionCallbackInfo<Value>& args) {
|
|||||||
NODE_SET_METHOD(proto, "writeFloatBE", WriteFloatBE);
|
NODE_SET_METHOD(proto, "writeFloatBE", WriteFloatBE);
|
||||||
NODE_SET_METHOD(proto, "writeFloatLE", WriteFloatLE);
|
NODE_SET_METHOD(proto, "writeFloatLE", WriteFloatLE);
|
||||||
|
|
||||||
|
NODE_SET_METHOD(proto, "toArrayBuffer", ToArrayBuffer);
|
||||||
|
|
||||||
NODE_SET_METHOD(proto, "copy", Copy);
|
NODE_SET_METHOD(proto, "copy", Copy);
|
||||||
NODE_SET_METHOD(proto, "fill", Fill);
|
NODE_SET_METHOD(proto, "fill", Fill);
|
||||||
|
|
||||||
|
@ -981,3 +981,15 @@ assert.throws(function() {
|
|||||||
assert.equal(c[i], i);
|
assert.equal(c[i], i);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
// Test Buffers to ArrayBuffers
|
||||||
|
var b = new Buffer(5).fill('abcdf');
|
||||||
|
var c = b.toArrayBuffer();
|
||||||
|
assert.equal(c.byteLength, 5);
|
||||||
|
assert.equal(Object.prototype.toString.call(c), '[object ArrayBuffer]');
|
||||||
|
var d = new Uint8Array(c);
|
||||||
|
for (var i = 0; i < 5; i++)
|
||||||
|
assert.equal(d[i], b[i]);
|
||||||
|
b.fill('ghijk');
|
||||||
|
for (var i = 0; i < 5; i++)
|
||||||
|
assert.notEqual(d[i], b[i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user