| # Buffer |
| |
| Class `Napi::Buffer` inherits from class [`Napi::Uint8Array`][]. |
| |
| The `Napi::Buffer` class creates a projection of raw data that can be consumed by |
| script. |
| |
| ## Methods |
| |
| ### New |
| |
| Allocates a new `Napi::Buffer` object with a given length. |
| |
| ```cpp |
| static Napi::Buffer<T> Napi::Buffer::New(napi_env env, size_t length); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] length`: The number of `T` elements to allocate. |
| |
| Returns a new `Napi::Buffer` object. |
| |
| ### New |
| |
| > When `NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED` is defined, this method is not available. |
| > See [External Buffer][] for more information. |
| |
| Wraps the provided external data into a new `Napi::Buffer` object. |
| |
| The `Napi::Buffer` object does not assume ownership for the data and expects it |
| to be valid for the lifetime of the object. Since the `Napi::Buffer` is subject |
| to garbage collection this overload is only suitable for data which is static |
| and never needs to be freed. This factory method will not provide the caller |
| with an opportunity to free the data when the `Napi::Buffer` gets |
| garbage-collected. If you need to free the data retained by the `Napi::Buffer` |
| object please use other variants of the `Napi::Buffer::New` factory method that |
| accept `Finalizer`, which is a function that will be invoked when the |
| `Napi::Buffer` object has been destroyed. See [Finalization][] for more details. |
| |
| ```cpp |
| static Napi::Buffer<T> Napi::Buffer::New(napi_env env, T* data, size_t length); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] data`: The pointer to the external data to expose. |
| - `[in] length`: The number of `T` elements in the external data. |
| |
| Returns a new `Napi::Buffer` object. |
| |
| ### New |
| |
| > When `NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED` is defined, this method is not available. |
| > See [External Buffer][] for more information. |
| |
| Wraps the provided external data into a new `Napi::Buffer` object. |
| |
| The `Napi::Buffer` object does not assume ownership for the data and expects it |
| to be valid for the lifetime of the object. The data can only be freed once the |
| `finalizeCallback` is invoked to indicate that the `Napi::Buffer` has been released. |
| |
| ```cpp |
| template <typename Finalizer> |
| static Napi::Buffer<T> Napi::Buffer::New(napi_env env, |
| T* data, |
| size_t length, |
| Finalizer finalizeCallback); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] data`: The pointer to the external data to expose. |
| - `[in] length`: The number of `T` elements in the external data. |
| - `[in] finalizeCallback`: The function called when the engine destroys the |
| `Napi::Buffer` object, implementing `operator()(Napi::BasicEnv, T*)`. See |
| [Finalization][] for more details. |
| |
| Returns a new `Napi::Buffer` object. |
| |
| ### New |
| |
| > When `NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED` is defined, this method is not available. |
| > See [External Buffer][] for more information. |
| |
| Wraps the provided external data into a new `Napi::Buffer` object. |
| |
| The `Napi::Buffer` object does not assume ownership for the data and expects it to be |
| valid for the lifetime of the object. The data can only be freed once the |
| `finalizeCallback` is invoked to indicate that the `Napi::Buffer` has been released. |
| |
| ```cpp |
| template <typename Finalizer, typename Hint> |
| static Napi::Buffer<T> Napi::Buffer::New(napi_env env, |
| T* data, |
| size_t length, |
| Finalizer finalizeCallback, |
| Hint* finalizeHint); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] data`: The pointer to the external data to expose. |
| - `[in] length`: The number of `T` elements in the external data. |
| - `[in] finalizeCallback`: The function called when the engine destroys the |
| `Napi::Buffer` object, implementing `operator()(Napi::BasicEnv, T*, Hint*)`. |
| See [Finalization][] for more details. |
| - `[in] finalizeHint`: The hint value passed to the `finalizeCallback` function. |
| |
| Returns a new `Napi::Buffer` object. |
| |
| ### NewOrCopy |
| |
| Wraps the provided external data into a new `Napi::Buffer` object. When the |
| [external buffer][] is not supported, allocates a new `Napi::Buffer` object and |
| copies the provided external data into it. |
| |
| The `Napi::Buffer` object does not assume ownership for the data and expects it to be |
| valid for the lifetime of the object. Since the `Napi::Buffer` is subject to garbage |
| collection this overload is only suitable for data which is static and never |
| needs to be freed. |
| |
| This factory method will not provide the caller with an opportunity to free the |
| data when the `Napi::Buffer` gets garbage-collected. If you need to free the |
| data retained by the `Napi::Buffer` object please use other variants of the |
| `Napi::Buffer::New` factory method that accept `Napi::Finalizer`, which is a |
| function that will be invoked when the `Napi::Buffer` object has been |
| destroyed. |
| |
| ```cpp |
| static Napi::Buffer<T> Napi::Buffer::NewOrCopy(napi_env env, T* data, size_t length); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] data`: The pointer to the external data to expose. |
| - `[in] length`: The number of `T` elements in the external data. |
| |
| Returns a new `Napi::Buffer` object. |
| |
| ### NewOrCopy |
| |
| Wraps the provided external data into a new `Napi::Buffer` object. When the |
| [external buffer][] is not supported, allocates a new `Napi::Buffer` object and |
| copies the provided external data into it and the `finalizeCallback` is invoked |
| immediately. |
| |
| The `Napi::Buffer` object does not assume ownership for the data and expects it |
| to be valid for the lifetime of the object. The data can only be freed once the |
| `finalizeCallback` is invoked to indicate that the `Napi::Buffer` has been released. |
| |
| ```cpp |
| template <typename Finalizer> |
| static Napi::Buffer<T> Napi::Buffer::NewOrCopy(napi_env env, |
| T* data, |
| size_t length, |
| Finalizer finalizeCallback); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] data`: The pointer to the external data to expose. |
| - `[in] length`: The number of `T` elements in the external data. |
| - `[in] finalizeCallback`: The function called when the engine destroys the |
| `Napi::Buffer` object, implementing `operator()(Napi::BasicEnv, T*)`. See |
| [Finalization][] for more details. |
| |
| Returns a new `Napi::Buffer` object. |
| |
| ### NewOrCopy |
| |
| Wraps the provided external data into a new `Napi::Buffer` object. When the |
| [external buffer][] is not supported, allocates a new `Napi::Buffer` object and |
| copies the provided external data into it and the `finalizeCallback` is invoked |
| immediately. |
| |
| The `Napi::Buffer` object does not assume ownership for the data and expects it to be |
| valid for the lifetime of the object. The data can only be freed once the |
| `finalizeCallback` is invoked to indicate that the `Napi::Buffer` has been released. |
| |
| ```cpp |
| template <typename Finalizer, typename Hint> |
| static Napi::Buffer<T> Napi::Buffer::NewOrCopy(napi_env env, |
| T* data, |
| size_t length, |
| Finalizer finalizeCallback, |
| Hint* finalizeHint); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] data`: The pointer to the external data to expose. |
| - `[in] length`: The number of `T` elements in the external data. |
| - `[in] finalizeCallback`: The function called when the engine destroys the |
| `Napi::Buffer` object, implementing `operator()(Napi::BasicEnv, T*, Hint*)`. |
| See [Finalization][] for more details. |
| - `[in] finalizeHint`: The hint value passed to the `finalizeCallback` function. |
| |
| Returns a new `Napi::Buffer` object. |
| |
| ### Copy |
| |
| Allocates a new `Napi::Buffer` object and copies the provided external data into it. |
| |
| ```cpp |
| static Napi::Buffer<T> Napi::Buffer::Copy(napi_env env, const T* data, size_t length); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] data`: The pointer to the external data to copy. |
| - `[in] length`: The number of `T` elements in the external data. |
| |
| Returns a new `Napi::Buffer` object containing a copy of the data. |
| |
| ### Constructor |
| |
| Initializes an empty instance of the `Napi::Buffer` class. |
| |
| ```cpp |
| Napi::Buffer::Buffer(); |
| ``` |
| |
| ### Constructor |
| |
| Initializes the `Napi::Buffer` object using an existing Uint8Array. |
| |
| ```cpp |
| Napi::Buffer::Buffer(napi_env env, napi_value value); |
| ``` |
| |
| - `[in] env`: The environment in which to create the `Napi::Buffer` object. |
| - `[in] value`: The Uint8Array reference to wrap. |
| |
| ### Data |
| |
| ```cpp |
| T* Napi::Buffer::Data() const; |
| ``` |
| |
| Returns a pointer the external data. |
| |
| ### Length |
| |
| ```cpp |
| size_t Napi::Buffer::Length() const; |
| ``` |
| |
| Returns the number of `T` elements in the external data. |
| |
| [`Napi::Uint8Array`]: ./typed_array_of.md |
| [External Buffer]: ./external_buffer.md |
| [Finalization]: ./finalization.md |