OpenVDB  0.104.0
Public Types | Public Member Functions | List of all members
LeafManager< TreeT > Class Template Reference

Given a tree this class defines a linear array of its leafs and optional auxiliary buffers. This is useful for multi-threading computations over leaf values in a static tree, i.e. voxel values, vs topology, is dynamic. The auxiliary buffers can conventiently be used for temporal integration. Efficient methods are provided for multi-threaded swapping and sync'ing (i.e. copying) of these buffers. More...

#include <LeafManager.h>

Public Types

typedef TreeT TreeType
 
typedef TreeType::LeafNodeType LeafType
 
typedef LeafType::Buffer BufferType
 
typedef tbb::blocked_range
< size_t > 
RangeType
 

Public Member Functions

 LeafManager (TreeType &tree, size_t auxBuffersPerLeaf=0, bool serial=false)
 Constructor from a tree reference and auxiliary buffers count (default is no auxiliary buffers). More...
 
 LeafManager (const LeafManager &other)
 Shallow copy constructor called by tbb::parallel_for() threads. More...
 
virtual ~LeafManager ()
 
void rebuild (bool serial=false)
 Use this method for (re)-initialization. It clears all existing leafs and auxiliary buffers and allocates new ones. New auxiliary buffers are initialized to the corresponding leaf node buffer. More...
 
void rebuild (size_t auxBuffersPerLeaf, bool serial=false)
 Clears all existing leafs and auxiliary buffers and allocates new ones. More...
 
void rebuild (TreeType &tree, bool serial=false)
 Clears all existing leafs and auxiliary buffers and allocates new ones. More...
 
void rebuild (TreeType &tree, size_t auxBuffersPerLeaf, bool serial=false)
 Clears all existing leafs and auxiliary buffers and allocates new ones. More...
 
void rebuildAuxBuffers (size_t auxBuffersPerLeaf, bool serial=false)
 
void removeAuxBuffers ()
 Remove the auxiliary buffers (the leafs are unchanged) More...
 
void rebuildLeafs ()
 Remove the auxiliary buffers and rebuild the array of leafs. More...
 
size_t auxBufferCount () const
 The total number of allocated auxiliary buffers. More...
 
size_t auxBuffersPerLeaf () const
 The number of auxiliary buffers per LeafNode. More...
 
size_t leafCount () const
 
TreeTypetree ()
 
LeafTypeleaf (size_t leafId)
 
BufferTypegetBuffer (size_t leafId, size_t bufferId)
 
RangeType getRange (size_t grainsize=1)
 Return range of the buffer-array. Needed for multithreading by tbb. More...
 
bool swapLeafBuffer (size_t bufferId, bool serial=false)
 Swaps the leaf node with the specified auxiliary buffer. More...
 
bool swapBuffer (size_t bufferId1, size_t bufferId2, bool serial=false)
 
bool syncAuxBuffer (size_t bufferId, bool serial=false)
 Syncs up the specified auxiliary buffer with the corresponding leaf node buffer. More...
 
bool syncAllBuffers (bool serial=false)
 Syncs up all auxiliary buffer with the corresponding leaf node buffer. More...
 
void operator() (const RangeType &r) const
 Used internally by tbb::parallel_for() - never call it directly! More...
 

Detailed Description

template<typename TreeT>
class openvdb::v0_104_0::tree::LeafManager< TreeT >

Given a tree this class defines a linear array of its leafs and optional auxiliary buffers. This is useful for multi-threading computations over leaf values in a static tree, i.e. voxel values, vs topology, is dynamic. The auxiliary buffers can conventiently be used for temporal integration. Efficient methods are provided for multi-threaded swapping and sync'ing (i.e. copying) of these buffers.

Note
By definition the buffers residing inside LeafNodes correspond to bufferId = 0, and any (optional) auxiliary buffers are indexed starting from one.

Member Typedef Documentation

typedef LeafType::Buffer BufferType
typedef TreeType::LeafNodeType LeafType
typedef tbb::blocked_range<size_t> RangeType
typedef TreeT TreeType

Constructor & Destructor Documentation

LeafManager ( TreeType tree,
size_t  auxBuffersPerLeaf = 0,
bool  serial = false 
)
inline

Constructor from a tree reference and auxiliary buffers count (default is no auxiliary buffers).

LeafManager ( const LeafManager< TreeT > &  other)
inline

Shallow copy constructor called by tbb::parallel_for() threads.

virtual ~LeafManager ( )
inlinevirtual

Member Function Documentation

size_t auxBufferCount ( ) const
inline

The total number of allocated auxiliary buffers.

size_t auxBuffersPerLeaf ( ) const
inline

The number of auxiliary buffers per LeafNode.

BufferType& getBuffer ( size_t  leafId,
size_t  bufferId 
)
inline
Returns
The leaf or auxiliary buffer specified by leafId. If bufferId is zero the LeafNode buffer is returned, else the n'th auxiliary buffer where n = bufferId -1.
Note
For performance reasons no range checks are performed on the inputs - other than asserts! Since auxiliary buffers, unlike leaf buffers, are likely to not exist, be especially caseful when specifying the bufferId index.
RangeType getRange ( size_t  grainsize = 1)
inline

Return range of the buffer-array. Needed for multithreading by tbb.

LeafType& leaf ( size_t  leafId)
inline
Returns
the leaf specified by leafId.
Note
For performance reasons no range check is performed - other than assert!
size_t leafCount ( ) const
inline
Returns
size of the of the LeafManager, corresponding to the number of leaf nodes.
void operator() ( const RangeType r) const
inline

Used internally by tbb::parallel_for() - never call it directly!

All methods below are for internal use only and should never be called directly

void rebuild ( bool  serial = false)
inline

Use this method for (re)-initialization. It clears all existing leafs and auxiliary buffers and allocates new ones. New auxiliary buffers are initialized to the corresponding leaf node buffer.

void rebuild ( size_t  auxBuffersPerLeaf,
bool  serial = false 
)
inline

Clears all existing leafs and auxiliary buffers and allocates new ones.

void rebuild ( TreeType tree,
bool  serial = false 
)
inline

Clears all existing leafs and auxiliary buffers and allocates new ones.

void rebuild ( TreeType tree,
size_t  auxBuffersPerLeaf,
bool  serial = false 
)
inline

Clears all existing leafs and auxiliary buffers and allocates new ones.

void rebuildAuxBuffers ( size_t  auxBuffersPerLeaf,
bool  serial = false 
)
inline

Use this method to change to number of auxiliary buffers. If auxBuffersPerLeaf=0 all existing auxiliary buffers are deleted, but the leaf nodes are always unchanged. Also note that new auxiliary buffers are initialized as a copy of the corresponding leaf node buffer.

void rebuildLeafs ( )
inline

Remove the auxiliary buffers and rebuild the array of leafs.

void removeAuxBuffers ( )
inline

Remove the auxiliary buffers (the leafs are unchanged)

bool swapBuffer ( size_t  bufferId1,
size_t  bufferId2,
bool  serial = false 
)
inline
bool swapLeafBuffer ( size_t  bufferId,
bool  serial = false 
)
inline

Swaps the leaf node with the specified auxiliary buffer.

Returns
true if swap was successfuly
Parameters
bufferIdIndex of the buffer that will be swapped with the corresponding leaf node buffer.
serialif false, swap buffers in parallel using multiple threads.
Note
Recall that the indexing of auxiliary buffers is 1-based, since bufferId=0 correponds to the leaf node buffer. So bufferId=1 corresponds to the first auxiliary buffer.
bool syncAllBuffers ( bool  serial = false)
inline

Syncs up all auxiliary buffer with the corresponding leaf node buffer.

Returns
true if sync was successfuly
Parameters
serialif false, sync buffers in parallel using multiple threads.
bool syncAuxBuffer ( size_t  bufferId,
bool  serial = false 
)
inline

Syncs up the specified auxiliary buffer with the corresponding leaf node buffer.

Returns
true if sync was successfuly
Parameters
bufferIdIndex of the buffer that will contain a copy of the corresponding leaf node buffer.
serialif false, sync buffers in parallel using multiple threads.
Note
Recall that the indexing of auxiliary buffers is 1-based, since bufferId=0 correponds to the leaf node buffer. So bufferId=1 corresponds to the first auxiliary buffer.
TreeType& tree ( )
inline

The documentation for this class was generated from the following file: