OpenVDB  9.0.1
Classes | Public Member Functions | Static Public Member Functions | List of all members
HostBuffer Class Reference

This is a buffer that contains a shared or private pool to either externally or internally managed host memory. More...

#include <nanovdb/util/HostBuffer.h>

Classes

struct  Pool
 

Public Member Functions

 HostBuffer (uint64_t bufferSize=0)
 Return a full buffer or an empty buffer. More...
 
 HostBuffer (HostBuffer &&other)
 Move copy-constructor. More...
 
 ~HostBuffer ()
 Custom descructor. More...
 
HostBufferoperator= (HostBuffer &&other)
 Move copy assignment operation. More...
 
 HostBuffer (const HostBuffer &)=delete
 Disallow copy-construction. More...
 
HostBufferoperator= (const HostBuffer &)=delete
 Disallow copy assignment operation. More...
 
void init (uint64_t bufferSize, void *data=nullptr)
 Initialize as a full buffer with the specified size. If data is NULL the memory is internally allocated. More...
 
uint64_t poolSize () const
 Returns the size in bytes of the memory pool shared with this instance. More...
 
bool isManaged () const
 Return true if memory is managed (using std::malloc and std:free) by the shared pool in this buffer. Else memory is assumed to be managed externally. More...
 
bool isPool () const
 Return true if this is a pool, i.e. an empty buffer with a nonempty internal pool, i.e. this->size() == 0 and this->poolSize() != 0. More...
 
bool isFull () const
 Return true if the pool exists, is nonempty but has no more available memory. More...
 
void clear ()
 Clear this buffer so it is empty. More...
 
void reset ()
 Clears all existing buffers that are registered against the memory pool and resets the pool so it can be reused to create new buffers. More...
 
uint64_t poolUsage () const
 Total number of bytes from the pool currently in use by buffers. More...
 
void resizePool (uint64_t poolSize, void *data=nullptr)
 resize the pool size. It will attempt to resize the existing memory block, but if that fails a deep copy is performed. If data is not NULL it will be used as new externally managed memory for the pool. All registered buffers are updated so GridHandle::grid might return a new address (if deep copy was performed). More...
 
const uint8_t * data () const
 Retuns a pointer to the raw memory buffer managed by this allocator. More...
 
uint8_t * data ()
 Retuns a pointer to the raw memory buffer managed by this allocator. More...
 
uint64_t bufferSize () const
 Returns the size in bytes associated with this buffer. More...
 
uint64_t size () const
 Returns the size in bytes associated with this buffer. More...
 
bool isEmpty () const
 Returns true if this buffer has no memory associated with it. More...
 
bool empty () const
 Returns true if this buffer has no memory associated with it. More...
 

Static Public Member Functions

static HostBuffer createPool (uint64_t poolSize, void *data=nullptr)
 Return a pool buffer which satisfies: buffer.size == 0, buffer.poolSize() == poolSize, and buffer.data() == nullptr. If data==nullptr, memory for the pool will be allocated. More...
 
static HostBuffer createFull (uint64_t bufferSize, void *data=nullptr)
 Return a full buffer which satisfies: buffer.size == bufferSize, buffer.poolSize() == bufferSize, and buffer.data() == data. If data==nullptr, memory for the pool will be allocated. More...
 
static HostBuffer create (uint64_t bufferSize, const HostBuffer *pool=nullptr)
 Return a buffer with bufferSize bytes managed by the specified memory pool. If none is provided, i.e. pool == nullptr or pool->poolSize() == 0, one is created with size bufferSize, i.e. a full buffer is returned. More...
 

Detailed Description

This is a buffer that contains a shared or private pool to either externally or internally managed host memory.

Note
Terminology: Pool: 0 = buffer.size() < buffer.poolSize() Buffer: 0 < buffer.size() < buffer.poolSize() Full: 0 < buffer.size() = buffer.poolSize() Empty: 0 = buffer.size() = buffer.poolSize()

Constructor & Destructor Documentation

HostBuffer ( uint64_t  bufferSize = 0)
inline

Return a full buffer or an empty buffer.

HostBuffer ( HostBuffer &&  other)
inline

Move copy-constructor.

~HostBuffer ( )
inline

Custom descructor.

HostBuffer ( const HostBuffer )
delete

Disallow copy-construction.

Member Function Documentation

uint64_t bufferSize ( ) const
inline

Returns the size in bytes associated with this buffer.

void clear ( )
inline

Clear this buffer so it is empty.

HostBuffer create ( uint64_t  bufferSize,
const HostBuffer pool = nullptr 
)
inlinestatic

Return a buffer with bufferSize bytes managed by the specified memory pool. If none is provided, i.e. pool == nullptr or pool->poolSize() == 0, one is created with size bufferSize, i.e. a full buffer is returned.

Exceptions
Ifthe specified pool has insufficient memory for the requested buffer size.
HostBuffer createFull ( uint64_t  bufferSize,
void *  data = nullptr 
)
inlinestatic

Return a full buffer which satisfies: buffer.size == bufferSize, buffer.poolSize() == bufferSize, and buffer.data() == data. If data==nullptr, memory for the pool will be allocated.

Exceptions
IfbufferSize is zero.
HostBuffer createPool ( uint64_t  poolSize,
void *  data = nullptr 
)
inlinestatic

Return a pool buffer which satisfies: buffer.size == 0, buffer.poolSize() == poolSize, and buffer.data() == nullptr. If data==nullptr, memory for the pool will be allocated.

Exceptions
IfpoolSize is zero.
const uint8_t* data ( ) const
inline

Retuns a pointer to the raw memory buffer managed by this allocator.

Warning
Note that the pointer can be NULL if the allocator was not initialized!
uint8_t* data ( )
inline

Retuns a pointer to the raw memory buffer managed by this allocator.

Warning
Note that the pointer can be NULL if the allocator was not initialized!
bool empty ( ) const
inline

Returns true if this buffer has no memory associated with it.

void init ( uint64_t  bufferSize,
void *  data = nullptr 
)
inline

Initialize as a full buffer with the specified size. If data is NULL the memory is internally allocated.

bool isEmpty ( ) const
inline

Returns true if this buffer has no memory associated with it.

bool isFull ( ) const
inline

Return true if the pool exists, is nonempty but has no more available memory.

bool isManaged ( ) const
inline

Return true if memory is managed (using std::malloc and std:free) by the shared pool in this buffer. Else memory is assumed to be managed externally.

bool isPool ( ) const
inline

Return true if this is a pool, i.e. an empty buffer with a nonempty internal pool, i.e. this->size() == 0 and this->poolSize() != 0.

HostBuffer & operator= ( HostBuffer &&  other)
inline

Move copy assignment operation.

HostBuffer& operator= ( const HostBuffer )
delete

Disallow copy assignment operation.

uint64_t poolSize ( ) const
inline

Returns the size in bytes of the memory pool shared with this instance.

uint64_t poolUsage ( ) const
inline

Total number of bytes from the pool currently in use by buffers.

void reset ( )
inline

Clears all existing buffers that are registered against the memory pool and resets the pool so it can be reused to create new buffers.

Exceptions
Ifthis instance is not empty or contains no pool.
Warning
This method is not thread-safe!
void resizePool ( uint64_t  poolSize,
void *  data = nullptr 
)
inline

resize the pool size. It will attempt to resize the existing memory block, but if that fails a deep copy is performed. If data is not NULL it will be used as new externally managed memory for the pool. All registered buffers are updated so GridHandle::grid might return a new address (if deep copy was performed).

Note
This method can be use to resize the memory pool and even change it from internally to externally managed memory or vice versa.
Exceptions
ifpoolSize is less than this->poolUsage() the used memory or allocations fail.
uint64_t size ( ) const
inline

Returns the size in bytes associated with this buffer.