#include <v8-array-buffer.h>
Public Types | |
using | DeleterCallback = void(*)(void *data, size_t length, void *deleter_data) |
Public Member Functions | |
~BackingStore () | |
void * | Data () const |
size_t | ByteLength () const |
size_t | MaxByteLength () const |
bool | IsShared () const |
bool | IsResizableByUserJavaScript () const |
void | operator delete (void *ptr) |
Static Public Member Functions | |
static std::unique_ptr< BackingStore > | Reallocate (v8::Isolate *isolate, std::unique_ptr< BackingStore > backing_store, size_t byte_length) |
static void | EmptyDeleter (void *data, size_t length, void *deleter_data) |
A wrapper around the backing store (i.e. the raw memory) of an array buffer. See a document linked in http://crbug.com/v8/9908 for more information.
The allocation and destruction of backing stores is generally managed by V8. Clients should always use standard C++ memory ownership types (i.e. std::unique_ptr and std::shared_ptr) to manage lifetimes of backing stores properly, since V8 internal objects may alias backing stores.
This object does not keep the underlying |ArrayBuffer::Allocator| alive by default. Use Isolate::CreateParams::array_buffer_allocator_shared when creating the Isolate to make it hold a reference to the allocator itself.
using v8::BackingStore::DeleterCallback = void (*)(void* data, size_t length, void* deleter_data) |
This callback is used only if the memory block for a BackingStore cannot be allocated with an ArrayBuffer::Allocator. In such cases the destructor of the BackingStore invokes the callback to free the memory block.
v8::BackingStore::~BackingStore | ( | ) |
size_t v8::BackingStore::ByteLength | ( | ) | const |
The length (in bytes) of this backing store.
void * v8::BackingStore::Data | ( | ) | const |
Return a pointer to the beginning of the memory block for this backing store. The pointer is only valid as long as this backing store object lives.
|
static |
If the memory block of a BackingStore is static or is managed manually, then this empty deleter along with nullptr deleter_data can be passed to ArrayBuffer::NewBackingStore to indicate that.
The manually managed case should be used with caution and only when it is guaranteed that the memory block freeing happens after detaching its ArrayBuffer.
bool v8::BackingStore::IsResizableByUserJavaScript | ( | ) | const |
Indicates whether the backing store was created for a resizable ArrayBuffer or a growable SharedArrayBuffer, and thus may be resized by user JavaScript code.
bool v8::BackingStore::IsShared | ( | ) | const |
Indicates whether the backing store was created for an ArrayBuffer or a SharedArrayBuffer.
size_t v8::BackingStore::MaxByteLength | ( | ) | const |
The maximum length (in bytes) that this backing store may grow to.
If this backing store was created for a resizable ArrayBuffer or a growable SharedArrayBuffer, it is >= ByteLength(). Otherwise it is == ByteLength().
|
inline |
Prevent implicit instantiation of operator delete with size_t argument. The size_t argument would be incorrect because ptr points to the internal BackingStore object.
|
static |
Wrapper around ArrayBuffer::Allocator::Reallocate that preserves IsShared. Assumes that the backing_store was allocated by the ArrayBuffer allocator of the given isolate.