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