diff --git a/README.md b/README.md index bdb8b9389..9a27d6c4d 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ still a work in progress as its not yet complete). - [ArrayBuffer](doc/array_buffer.md) - [TypedArray](doc/typed_array.md) - [TypedArrayOf](doc/typed_array_of.md) + - [DataView](doc/dataview.md) - [Memory Management](doc/memory_management.md) - [Async Operations](doc/async_operations.md) - [AsyncWorker](doc/async_worker.md) diff --git a/doc/dataview.md b/doc/dataview.md new file mode 100644 index 000000000..7f4af81db --- /dev/null +++ b/doc/dataview.md @@ -0,0 +1,244 @@ +# DataView + +The `Napi::DataView` class corresponds to the +[JavaScript `DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) +class. + +## Methods + +### New + +Allocates a new `Napi::DataView` instance with a given `Napi::ArrayBuffer`. + +```cpp +static Napi::DataView New(napi_env env, Napi::ArrayBuffer arrayBuffer); +``` + +- `[in] env`: The environment in which to create the `Napi::DataView` instance. +- `[in] arrayBuffer` : `Napi::ArrayBuffer` underlying the `Napi::DataView`. + +Returns a new `Napi::DataView` instance. + +### New + +Allocates a new `Napi::DataView` instance with a given `Napi::ArrayBuffer`. + +```cpp +static Napi::DataView New(napi_env env, Napi::ArrayBuffer arrayBuffer, size_t byteOffset); +``` + +- `[in] env`: The environment in which to create the `Napi::DataView` instance. +- `[in] arrayBuffer` : `Napi::ArrayBuffer` underlying the `Napi::DataView`. +- `[in] byteOffset` : The byte offset within the `Napi::ArrayBuffer` from which to start projecting the `Napi::DataView`. + +Returns a new `Napi::DataView` instance. + +### New + +Allocates a new `Napi::DataView` instance with a given `Napi::ArrayBuffer`. + +```cpp +static Napi::DataView New(napi_env env, Napi::ArrayBuffer arrayBuffer, size_t byteOffset, size_t byteLength); +``` + +- `[in] env`: The environment in which to create the `Napi::DataView` instance. +- `[in] arrayBuffer` : `Napi::ArrayBuffer` underlying the `Napi::DataView`. +- `[in] byteOffset` : The byte offset within the `Napi::ArrayBuffer` from which to start projecting the `Napi::DataView`. +- `[in] byteLength` : Number of elements in the `Napi::DataView`. + +Returns a new `Napi::DataView` instance. + +### Constructor + +Initializes an empty instance of the `Napi::DataView` class. + +```cpp +DataView(); +``` + +### Constructor + +Initializes a wrapper instance of an existing `Napi::DataView` instance. + +```cpp +DataView(napi_env env, napi_value value); +``` + +- `[in] env`: The environment in which to create the `Napi::DataView` instance. +- `[in] value`: The `Napi::DataView` reference to wrap. + +### ArrayBuffer + +```cpp +Napi::ArrayBuffer ArrayBuffer() const; +``` + +Returns the backing array buffer. + +### ByteOffset + +```cpp +size_t ByteOffset() const; +``` + +Returns the offset into the `Napi::DataView` where the array starts, in bytes. + +### ByteLength + +```cpp +size_t ByteLength() const; +``` + +Returns the length of the array, in bytes. + +### GetFloat32 + +```cpp +float GetFloat32(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a signed 32-bit float (float) at the specified byte offset from the start of the `DataView`. + +### GetFloat64 + +```cpp +double GetFloat64(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a signed 64-bit float (double) at the specified byte offset from the start of the `Napi::DataView`. + +### GetInt8 + +```cpp +int8_t GetInt8(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a signed 8-bit integer (byte) at the specified byte offset from the start of the `Napi::DataView`. + +### GetInt16 + +```cpp +int16_t GetInt16(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a signed 16-bit integer (short) at the specified byte offset from the start of the `Napi::DataView`. + +### GetInt32 + +```cpp +int32_t GetInt32(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a signed 32-bit integer (long) at the specified byte offset from the start of the `Napi::DataView`. + +### GetUint8 + +```cpp +uint8_t GetUint8(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a unsigned 8-bit integer (unsigned byte) at the specified byte offset from the start of the `Napi::DataView`. + +### GetUint16 + +```cpp +uint16_t GetUint16(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a unsigned 16-bit integer (unsigned short) at the specified byte offset from the start of the `Napi::DataView`. + +### GetUint32 + +```cpp +uint32_t GetUint32(size_t byteOffset) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. + +Returns a unsigned 32-bit integer (unsigned long) at the specified byte offset from the start of the `Napi::DataView`. + +### SetFloat32 + +```cpp +void SetFloat32(size_t byteOffset, float value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. + +### SetFloat64 + +```cpp +void SetFloat64(size_t byteOffset, double value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. + +### SetInt8 + +```cpp +void SetInt8(size_t byteOffset, int8_t value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. + +### SetInt16 + +```cpp +void SetInt16(size_t byteOffset, int16_t value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. + +### SetInt32 + +```cpp +void SetInt32(size_t byteOffset, int32_t value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. + +### SetUint8 + +```cpp +void SetUint8(size_t byteOffset, uint8_t value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. + +### SetUint16 + +```cpp +void SetUint16(size_t byteOffset, uint16_t value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. + +### SetUint32 + +```cpp +void SetUint32(size_t byteOffset, uint32_t value) const; +``` + +- `[in] byteOffset`: The offset, in byte, from the start of the view where to read the data. +- `[in] value`: The value to set. diff --git a/napi-inl.h b/napi-inl.h index 59eacf9f8..c96319843 100644 --- a/napi-inl.h +++ b/napi-inl.h @@ -364,7 +364,6 @@ inline bool Value::IsPromise() const { return result; } -#if NAPI_DATA_VIEW_FEATURE inline bool Value::IsDataView() const { if (_value == nullptr) { return false; @@ -375,7 +374,6 @@ inline bool Value::IsDataView() const { NAPI_THROW_IF_FAILED(_env, status, false); return result; } -#endif inline bool Value::IsBuffer() const { if (_value == nullptr) { @@ -1255,7 +1253,6 @@ inline void ArrayBuffer::EnsureInfo() const { } } -#if NAPI_DATA_VIEW_FEATURE //////////////////////////////////////////////////////////////////////////////// // DataView class //////////////////////////////////////////////////////////////////////////////// @@ -1426,7 +1423,6 @@ inline void DataView::WriteData(size_t byteOffset, T value) const { *reinterpret_cast(static_cast(_data) + byteOffset) = value; } -#endif //////////////////////////////////////////////////////////////////////////////// // TypedArray class diff --git a/napi.h b/napi.h index a8eafd312..7b0f17f11 100644 --- a/napi.h +++ b/napi.h @@ -189,9 +189,7 @@ namespace Napi { bool IsObject() const; ///< Tests if a value is a JavaScript object. bool IsFunction() const; ///< Tests if a value is a JavaScript function. bool IsPromise() const; ///< Tests if a value is a JavaScript promise. -#if NAPI_DATA_VIEW_FEATURE bool IsDataView() const; ///< Tests if a value is a JavaScript data view. -#endif bool IsBuffer() const; ///< Tests if a value is a Node buffer. bool IsExternal() const; ///< Tests if a value is a pointer to external data. @@ -836,7 +834,6 @@ namespace Napi { T* data); }; -#if NAPI_DATA_VIEW_FEATURE /// The DataView provides a low-level interface for reading/writing multiple /// number types in an ArrayBuffer irrespective of the platform's endianness. class DataView : public Object { @@ -888,7 +885,6 @@ namespace Napi { void* _data; size_t _length; }; -#endif class Function : public Object { public: diff --git a/test/binding.gyp b/test/binding.gyp index 3945a8085..ed9c6899b 100644 --- a/test/binding.gyp +++ b/test/binding.gyp @@ -37,7 +37,7 @@ 'targets': [ { 'target_name': 'binding', - 'defines': [ 'NAPI_CPP_EXCEPTIONS', 'NAPI_DATA_VIEW_FEATURE' ], + 'defines': [ 'NAPI_CPP_EXCEPTIONS' ], 'cflags!': [ '-fno-exceptions' ], 'cflags_cc!': [ '-fno-exceptions' ], 'msvs_settings': { @@ -54,7 +54,7 @@ }, { 'target_name': 'binding_noexcept', - 'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS', 'NAPI_DATA_VIEW_FEATURE' ], + 'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ], 'cflags': [ '-fno-exceptions' ], 'cflags_cc': [ '-fno-exceptions' ], 'msvs_settings': {