diff --git a/napi-inl.h b/napi-inl.h index 492b8f61a..b297ff00d 100644 --- a/napi-inl.h +++ b/napi-inl.h @@ -2635,7 +2635,7 @@ inline Buffer Buffer::New(napi_env env, size_t length) { napi_status status = napi_create_buffer(env, length * sizeof(T), &data, &value); NAPI_THROW_IF_FAILED(env, status, Buffer()); - return Buffer(env, value, length, static_cast(data)); + return Buffer(env, value); } #ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED @@ -2645,7 +2645,7 @@ inline Buffer Buffer::New(napi_env env, T* data, size_t length) { napi_status status = napi_create_external_buffer( env, length * sizeof(T), data, nullptr, nullptr, &value); NAPI_THROW_IF_FAILED(env, status, Buffer()); - return Buffer(env, value, length, data); + return Buffer(env, value); } template @@ -2669,7 +2669,7 @@ inline Buffer Buffer::New(napi_env env, delete finalizeData; NAPI_THROW_IF_FAILED(env, status, Buffer()); } - return Buffer(env, value, length, data); + return Buffer(env, value); } template @@ -2694,7 +2694,7 @@ inline Buffer Buffer::New(napi_env env, delete finalizeData; NAPI_THROW_IF_FAILED(env, status, Buffer()); } - return Buffer(env, value, length, data); + return Buffer(env, value); } #endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED @@ -2711,7 +2711,7 @@ inline Buffer Buffer::NewOrCopy(napi_env env, T* data, size_t length) { #ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED } NAPI_THROW_IF_FAILED(env, status, Buffer()); - return Buffer(env, value, length, data); + return Buffer(env, value); #endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED } @@ -2745,7 +2745,7 @@ inline Buffer Buffer::NewOrCopy(napi_env env, delete finalizeData; NAPI_THROW_IF_FAILED(env, status, Buffer()); } - return Buffer(env, value, length, data); + return Buffer(env, value); #endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED } @@ -2781,7 +2781,7 @@ inline Buffer Buffer::NewOrCopy(napi_env env, delete finalizeData; NAPI_THROW_IF_FAILED(env, status, Buffer()); } - return Buffer(env, value, length, data); + return Buffer(env, value); #endif } @@ -2805,42 +2805,20 @@ inline void Buffer::CheckCast(napi_env env, napi_value value) { } template -inline Buffer::Buffer() : Uint8Array(), _length(0), _data(nullptr) {} +inline Buffer::Buffer() : Uint8Array() {} template inline Buffer::Buffer(napi_env env, napi_value value) - : Uint8Array(env, value), _length(0), _data(nullptr) {} - -template -inline Buffer::Buffer(napi_env env, napi_value value, size_t length, T* data) - : Uint8Array(env, value), _length(length), _data(data) {} + : Uint8Array(env, value) {} template inline size_t Buffer::Length() const { - EnsureInfo(); - return _length; + return ByteLength() / sizeof(T); } template inline T* Buffer::Data() const { - EnsureInfo(); - return _data; -} - -template -inline void Buffer::EnsureInfo() const { - // The Buffer instance may have been constructed from a napi_value whose - // length/data are not yet known. Fetch and cache these values just once, - // since they can never change during the lifetime of the Buffer. - if (_data == nullptr) { - size_t byteLength; - void* voidData; - napi_status status = - napi_get_buffer_info(_env, _value, &voidData, &byteLength); - NAPI_THROW_IF_FAILED_VOID(_env, status); - _length = byteLength / sizeof(T); - _data = static_cast(voidData); - } + return reinterpret_cast(const_cast(Uint8Array::Data())); } //////////////////////////////////////////////////////////////////////////////// diff --git a/napi.h b/napi.h index 58c9eb971..9f20cb884 100644 --- a/napi.h +++ b/napi.h @@ -1535,11 +1535,6 @@ class Buffer : public Uint8Array { T* Data() const; private: - mutable size_t _length; - mutable T* _data; - - Buffer(napi_env env, napi_value value, size_t length, T* data); - void EnsureInfo() const; }; /// Holds a counted reference to a value; initially a weak reference unless