Browse Source

buffer: add buf.toArrayBuffer() API

v0.11.8-release
Trevor Norris 11 years ago
parent
commit
8a295cd520
  1. 4
      doc/api/buffer.markdown
  2. 22
      src/node_buffer.cc
  3. 12
      test/simple/test-buffer.js

4
doc/api/buffer.markdown

@ -671,6 +671,10 @@ buffer.
var b = new Buffer(50);
b.fill("h");
### buf.toArrayBuffer()
Creates a new `ArrayBuffer` with the copied memory of the buffer instance.
## buffer.INSPECT_MAX_BYTES
* Number, Default: 50

22
src/node_buffer.cc

@ -59,6 +59,7 @@
namespace node {
namespace Buffer {
using v8::ArrayBuffer;
using v8::Context;
using v8::Function;
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) {
HandleScope scope(node_isolate);
@ -604,6 +624,8 @@ void SetupBufferJS(const FunctionCallbackInfo<Value>& args) {
NODE_SET_METHOD(proto, "writeFloatBE", WriteFloatBE);
NODE_SET_METHOD(proto, "writeFloatLE", WriteFloatLE);
NODE_SET_METHOD(proto, "toArrayBuffer", ToArrayBuffer);
NODE_SET_METHOD(proto, "copy", Copy);
NODE_SET_METHOD(proto, "fill", Fill);

12
test/simple/test-buffer.js

@ -981,3 +981,15 @@ assert.throws(function() {
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…
Cancel
Save