mirror of https://github.com/lukechilds/node.git
Browse Source
Basic support for Dataview is added in this commit. This is achieved by using three functions, napi_create_dataview(), napi_is_dataview() and napi_get_dataview_info(). PR-URL: https://github.com/nodejs/node/pull/14382 Fixes: https://github.com/nodejs/node/issues/13926 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Timothy Gu <timothygu99@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>v6
committed by
Tobias Nießen
6 changed files with 236 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"targets": [ |
||||
|
{ |
||||
|
"target_name": "test_dataview", |
||||
|
"sources": [ "test_dataview.c" ] |
||||
|
} |
||||
|
] |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../../common'); |
||||
|
const assert = require('assert'); |
||||
|
|
||||
|
// Testing api calls for arrays
|
||||
|
const test_dataview = require(`./build/${common.buildType}/test_dataview`); |
||||
|
|
||||
|
//create dataview
|
||||
|
const buffer = new ArrayBuffer(128); |
||||
|
const template = Reflect.construct(DataView, [buffer]); |
||||
|
|
||||
|
const theDataview = test_dataview.CreateDataView(template); |
||||
|
assert.ok(theDataview instanceof DataView, |
||||
|
'The new variable should be of type Dataview'); |
@ -0,0 +1,49 @@ |
|||||
|
#include <node_api.h> |
||||
|
#include <string.h> |
||||
|
#include "../common.h" |
||||
|
|
||||
|
napi_value CreateDataView(napi_env env, napi_callback_info info) { |
||||
|
size_t argc = 1; |
||||
|
napi_value args [1]; |
||||
|
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); |
||||
|
|
||||
|
NAPI_ASSERT(env, argc == 1, "Wrong number of arguments"); |
||||
|
|
||||
|
napi_valuetype valuetype; |
||||
|
napi_value input_dataview = args[0]; |
||||
|
|
||||
|
NAPI_CALL(env, napi_typeof(env, input_dataview, &valuetype)); |
||||
|
NAPI_ASSERT(env, valuetype == napi_object, |
||||
|
"Wrong type of arguments. Expects a DataView as the first " |
||||
|
"argument."); |
||||
|
|
||||
|
bool is_dataview; |
||||
|
NAPI_CALL(env, napi_is_dataview(env, input_dataview, &is_dataview)); |
||||
|
NAPI_ASSERT(env, is_dataview, |
||||
|
"Wrong type of arguments. Expects a DataView as the first " |
||||
|
"argument."); |
||||
|
size_t byte_offset = 0; |
||||
|
size_t length = 0; |
||||
|
napi_value buffer; |
||||
|
NAPI_CALL(env, |
||||
|
napi_get_dataview_info(env, input_dataview, &length, NULL, |
||||
|
&buffer, &byte_offset)); |
||||
|
|
||||
|
napi_value output_dataview; |
||||
|
NAPI_CALL(env, |
||||
|
napi_create_dataview(env, length, buffer, |
||||
|
byte_offset, &output_dataview)); |
||||
|
|
||||
|
return output_dataview; |
||||
|
} |
||||
|
|
||||
|
void Init(napi_env env, napi_value exports, napi_value module, void* priv) { |
||||
|
napi_property_descriptor descriptors[] = { |
||||
|
DECLARE_NAPI_PROPERTY("CreateDataView", CreateDataView) |
||||
|
}; |
||||
|
|
||||
|
NAPI_CALL_RETURN_VOID(env, napi_define_properties( |
||||
|
env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors)); |
||||
|
} |
||||
|
|
||||
|
NAPI_MODULE(addon, Init) |
Loading…
Reference in new issue