@@ -934,6 +934,19 @@ inline bool Value::IsExternal() const {
934934 return Type () == napi_external;
935935}
936936
937+ #ifdef NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
938+ inline bool Value::IsSharedArrayBuffer () const {
939+ if (IsEmpty ()) {
940+ return false ;
941+ }
942+
943+ bool result;
944+ napi_status status = node_api_is_sharedarraybuffer (_env, _value, &result);
945+ NAPI_THROW_IF_FAILED (_env, status, false );
946+ return result;
947+ }
948+ #endif
949+
937950template <typename T>
938951inline T Value::As () const {
939952#ifdef NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS
@@ -2068,6 +2081,60 @@ inline uint32_t Array::Length() const {
20682081 return result;
20692082}
20702083
2084+ inline ArrayBufferLike::ArrayBufferLike () : Object () {}
2085+
2086+ inline ArrayBufferLike::ArrayBufferLike (napi_env env, napi_value value)
2087+ : Object (env, value) {}
2088+
2089+ inline void * ArrayBufferLike::Data () {
2090+ void * data;
2091+ napi_status status = napi_get_arraybuffer_info (_env, _value, &data, nullptr );
2092+ NAPI_THROW_IF_FAILED (_env, status, nullptr );
2093+ return data;
2094+ }
2095+
2096+ inline size_t ArrayBufferLike::ByteLength () {
2097+ size_t length;
2098+ napi_status status =
2099+ napi_get_arraybuffer_info (_env, _value, nullptr , &length);
2100+ NAPI_THROW_IF_FAILED (_env, status, 0 );
2101+ return length;
2102+ }
2103+
2104+ #ifdef NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
2105+ // //////////////////////////////////////////////////////////////////////////////
2106+ // SharedArrayBuffer class
2107+ // //////////////////////////////////////////////////////////////////////////////
2108+
2109+ inline SharedArrayBuffer::SharedArrayBuffer () : ArrayBufferLike () {}
2110+
2111+ inline SharedArrayBuffer::SharedArrayBuffer (napi_env env, napi_value value)
2112+ : ArrayBufferLike (env, value) {}
2113+
2114+ inline void SharedArrayBuffer::CheckCast (napi_env env, napi_value value) {
2115+ NAPI_CHECK (value != nullptr , " SharedArrayBuffer::CheckCast" , " empty value" );
2116+
2117+ bool result;
2118+ napi_status status = node_api_is_sharedarraybuffer (env, value, &result);
2119+ NAPI_CHECK (status == napi_ok,
2120+ " SharedArrayBuffer::CheckCast" ,
2121+ " node_api_is_sharedarraybuffer failed" );
2122+ NAPI_CHECK (
2123+ result, " SharedArrayBuffer::CheckCast" , " value is not sharedarraybuffer" );
2124+ }
2125+
2126+ inline SharedArrayBuffer SharedArrayBuffer::New (napi_env env,
2127+ size_t byteLength) {
2128+ napi_value value;
2129+ void * data;
2130+ napi_status status =
2131+ node_api_create_sharedarraybuffer (env, byteLength, &data, &value);
2132+ NAPI_THROW_IF_FAILED (env, status, SharedArrayBuffer ());
2133+
2134+ return SharedArrayBuffer (env, value);
2135+ }
2136+ #endif // NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
2137+
20712138// //////////////////////////////////////////////////////////////////////////////
20722139// ArrayBuffer class
20732140// //////////////////////////////////////////////////////////////////////////////
@@ -2154,25 +2221,10 @@ inline void ArrayBuffer::CheckCast(napi_env env, napi_value value) {
21542221 NAPI_CHECK (result, " ArrayBuffer::CheckCast" , " value is not arraybuffer" );
21552222}
21562223
2157- inline ArrayBuffer::ArrayBuffer () : Object () {}
2224+ inline ArrayBuffer::ArrayBuffer () : ArrayBufferLike () {}
21582225
21592226inline ArrayBuffer::ArrayBuffer (napi_env env, napi_value value)
2160- : Object (env, value) {}
2161-
2162- inline void * ArrayBuffer::Data () {
2163- void * data;
2164- napi_status status = napi_get_arraybuffer_info (_env, _value, &data, nullptr );
2165- NAPI_THROW_IF_FAILED (_env, status, nullptr );
2166- return data;
2167- }
2168-
2169- inline size_t ArrayBuffer::ByteLength () {
2170- size_t length;
2171- napi_status status =
2172- napi_get_arraybuffer_info (_env, _value, nullptr , &length);
2173- NAPI_THROW_IF_FAILED (_env, status, 0 );
2174- return length;
2175- }
2227+ : ArrayBufferLike (env, value) {}
21762228
21772229#if NAPI_VERSION >= 7
21782230inline bool ArrayBuffer::IsDetached () const {
0 commit comments