namespace node {
namespace Buffer {
+using v8::ArrayBuffer;
using v8::Context;
using v8::Function;
using v8::FunctionCallbackInfo;
}
+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);
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);
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]);