Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable DataView feature by default #331

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -90,6 +90,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)
244 changes: 244 additions & 0 deletions doc/dataview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
# DataView

romandev marked this conversation as resolved.
Show resolved Hide resolved
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.
4 changes: 0 additions & 4 deletions napi-inl.h
Original file line number Diff line number Diff line change
@@ -347,7 +347,6 @@ inline bool Value::IsPromise() const {
return result;
}

#if NAPI_DATA_VIEW_FEATURE
inline bool Value::IsDataView() const {
if (_value == nullptr) {
return false;
@@ -358,7 +357,6 @@ inline bool Value::IsDataView() const {
NAPI_THROW_IF_FAILED(_env, status, false);
return result;
}
#endif

inline bool Value::IsBuffer() const {
if (_value == nullptr) {
@@ -1175,7 +1173,6 @@ inline void ArrayBuffer::EnsureInfo() const {
}
}

#if NAPI_DATA_VIEW_FEATURE
////////////////////////////////////////////////////////////////////////////////
// DataView class
////////////////////////////////////////////////////////////////////////////////
@@ -1346,7 +1343,6 @@ inline void DataView::WriteData(size_t byteOffset, T value) const {

*reinterpret_cast<T*>(static_cast<uint8_t*>(_data) + byteOffset) = value;
}
#endif

////////////////////////////////////////////////////////////////////////////////
// TypedArray class
4 changes: 0 additions & 4 deletions napi.h
Original file line number Diff line number Diff line change
@@ -179,9 +179,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.

@@ -781,7 +779,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 {
@@ -833,7 +830,6 @@ namespace Napi {
void* _data;
size_t _length;
};
#endif

class Function : public Object {
public:
4 changes: 2 additions & 2 deletions test/binding.gyp
Original file line number Diff line number Diff line change
@@ -32,7 +32,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': {
@@ -49,7 +49,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': {