31 #ifndef OPENVDB_TREE_LEAF_ARRAY_HAS_BEEN_INCLUDED
32 #define OPENVDB_TREE_LEAF_ARRAY_HAS_BEEN_INCLUDED
34 #warning This file is deprecated and should be replaced by tree/LeafManager.h
39 #include <boost/shared_ptr.hpp>
40 #include <boost/static_assert.hpp>
41 #include <boost/bind.hpp>
42 #include <tbb/blocked_range.h>
43 #include <tbb/parallel_for.h>
44 #include <openvdb/tools/Morphology.h>
45 #include <openvdb/tree/LeafManager.h>
62 template<
typename TreeT,
int BufferCount>
66 typedef boost::shared_ptr<LeafArray>
Ptr;
69 typedef typename TreeType::LeafNodeType
LeafType;
77 void swap(
Index n) { assert(n < BufferCount); leaf->swap(buffer[n]); }
78 void copy(
Index n) { assert(n < BufferCount); buffer[n]=leaf->buffer(); }
79 void sync() {
for (
Index n = 0; n < BufferCount; ++n) this->copy(n); }
84 typedef typename std::vector<BufferStruct>
ArrayType;
91 this->init(tree, sync);
97 mArray.reserve(tree.leafCount());
98 for (
typename TreeType::LeafIter i = tree.beginLeaf(); i; ++i) {
101 if (sync) this->syncBuffers();
111 return IterRangeType(mArray.begin(), mArray.end(), grainsize);
122 if (n < BufferCount) {
123 for (
IterType i = r.begin(), e = r.end(); i != e; ++i) i->swap(n);
134 if (n < BufferCount) {
135 for (
IterType i = r.begin(), e = r.end(); i != e; ++i) i->copy(n);
145 for (
IterType i = r.begin(), e = r.end(); i != e; ++i) i->sync();
150 void swapBuffers(
Index n = 0,
bool serial =
false)
152 if (n < BufferCount) {
154 this->swapBufferRange(this->getRange(), n);
156 tbb::parallel_for(this->getRange(512), boost::bind(&swapBufferRange, _1, n));
163 void copyBuffers(
Index n = 0,
bool serial =
false)
165 if (n < BufferCount) {
167 this->copyBufferRange(this->getRange(), n);
169 tbb::parallel_for(this->getRange(8), boost::bind(©BufferRange, _1, n));
175 void syncBuffers(
bool serial =
false)
178 this->syncBufferRange(this->getRange());
180 tbb::parallel_for(this->getRange(8), boost::bind(&syncBufferRange, _1));
191 template<
typename TreeT>
195 typedef boost::shared_ptr<LeafArray>
Ptr;
202 struct BufferStruct {
218 mArray.reserve(tree.leafCount());
219 for (
typename TreeType::LeafIter i = tree.beginLeaf(); i; ++i) {
220 mArray.push_back( BufferStruct(*i) );
231 return IterRangeType(mArray.begin(), mArray.end(), grainsize);
239 template<
typename TreeType,
int BufferCount>
244 dilateVoxels<TreeType>(manager);
252 #endif // OPENVDB_TREE_LEAF_ARRAY_HAS_BEEN_INCLUDED