1+ #define NAPI_EXPERIMENTAL
2+ #include <js_native_api.h>
3+ #include "../common.h"
4+ #include "../entry_point.h"
5+
6+ #ifdef __wasm__
7+ #include "emnapi.h"
8+ #endif
9+
10+ static napi_value TestIsSharedArrayBuffer (napi_env env ,
11+ napi_callback_info info ) {
12+ size_t argc = 1 ;
13+ napi_value args [1 ];
14+ NODE_API_CALL (env , napi_get_cb_info (env , info , & argc , args , NULL , NULL ));
15+
16+ NODE_API_ASSERT (env , argc >= 1 , "Wrong number of arguments" );
17+
18+ bool is_sharedarraybuffer ;
19+ NODE_API_CALL (
20+ env , node_api_is_sharedarraybuffer (env , args [0 ], & is_sharedarraybuffer ));
21+
22+ napi_value ret ;
23+ NODE_API_CALL (env , napi_get_boolean (env , is_sharedarraybuffer , & ret ));
24+
25+ return ret ;
26+ }
27+
28+ static napi_value TestCreateSharedArrayBuffer (napi_env env ,
29+ napi_callback_info info ) {
30+ size_t argc = 1 ;
31+ napi_value args [1 ];
32+ NODE_API_CALL (env , napi_get_cb_info (env , info , & argc , args , NULL , NULL ));
33+
34+ NODE_API_ASSERT (env , argc >= 1 , "Wrong number of arguments" );
35+
36+ napi_valuetype valuetype0 ;
37+ NODE_API_CALL (env , napi_typeof (env , args [0 ], & valuetype0 ));
38+
39+ NODE_API_ASSERT (
40+ env ,
41+ valuetype0 == napi_number ,
42+ "Wrong type of arguments. Expects a number as first argument." );
43+
44+ int32_t byte_length ;
45+ NODE_API_CALL (env , napi_get_value_int32 (env , args [0 ], & byte_length ));
46+
47+ NODE_API_ASSERT (env ,
48+ byte_length >= 0 ,
49+ "Invalid byte length. Expects a non-negative integer." );
50+
51+ napi_value ret ;
52+ void * data ;
53+ NODE_API_CALL (
54+ env , node_api_create_sharedarraybuffer (env , byte_length , & data , & ret ));
55+
56+ return ret ;
57+ }
58+
59+ static napi_value TestGetSharedArrayBufferInfo (napi_env env ,
60+ napi_callback_info info ) {
61+ size_t argc = 1 ;
62+ napi_value args [1 ];
63+ NODE_API_CALL (env , napi_get_cb_info (env , info , & argc , args , NULL , NULL ));
64+
65+ NODE_API_ASSERT (env , argc >= 1 , "Wrong number of arguments" );
66+
67+ void * data ;
68+ size_t byte_length ;
69+ NODE_API_CALL (env ,
70+ napi_get_arraybuffer_info (env , args [0 ], & data , & byte_length ));
71+
72+ napi_value ret ;
73+ NODE_API_CALL (env , napi_create_uint32 (env , byte_length , & ret ));
74+
75+ return ret ;
76+ }
77+
78+ static void WriteTestDataToBuffer (void * data , size_t byte_length ) {
79+ if (byte_length > 0 && data != NULL ) {
80+ uint8_t * bytes = (uint8_t * )data ;
81+ for (size_t i = 0 ; i < byte_length ; i ++ ) {
82+ bytes [i ] = i % 256 ;
83+ }
84+ }
85+ }
86+
87+ static napi_value TestSharedArrayBufferData (napi_env env ,
88+ napi_callback_info info ) {
89+ size_t argc = 1 ;
90+ napi_value args [1 ];
91+ NODE_API_CALL (env , napi_get_cb_info (env , info , & argc , args , NULL , NULL ));
92+
93+ NODE_API_ASSERT (env , argc >= 1 , "Wrong number of arguments" );
94+
95+ void * data ;
96+ size_t byte_length ;
97+ NODE_API_CALL (env ,
98+ napi_get_arraybuffer_info (env , args [0 ], & data , & byte_length ));
99+
100+ WriteTestDataToBuffer (data , byte_length );
101+ #ifdef __wasm__
102+ emnapi_sync_memory (env , false, & args [0 ], 0 , NAPI_AUTO_LENGTH );
103+ #endif
104+
105+ // Return the same data pointer validity
106+ bool data_valid = (data != NULL ) && (byte_length > 0 );
107+
108+ napi_value ret ;
109+ NODE_API_CALL (env , napi_get_boolean (env , data_valid , & ret ));
110+
111+ return ret ;
112+ }
113+
114+ EXTERN_C_START
115+ napi_value Init (napi_env env , napi_value exports ) {
116+ napi_property_descriptor descriptors [] = {
117+ DECLARE_NODE_API_PROPERTY ("TestIsSharedArrayBuffer" ,
118+ TestIsSharedArrayBuffer ),
119+ DECLARE_NODE_API_PROPERTY ("TestCreateSharedArrayBuffer" ,
120+ TestCreateSharedArrayBuffer ),
121+ DECLARE_NODE_API_PROPERTY ("TestGetSharedArrayBufferInfo" ,
122+ TestGetSharedArrayBufferInfo ),
123+ DECLARE_NODE_API_PROPERTY ("TestSharedArrayBufferData" ,
124+ TestSharedArrayBufferData ),
125+ };
126+
127+ NODE_API_CALL (
128+ env ,
129+ napi_define_properties (env ,
130+ exports ,
131+ sizeof (descriptors ) / sizeof (* descriptors ),
132+ descriptors ));
133+
134+ return exports ;
135+ }
136+ EXTERN_C_END
0 commit comments