41 #ifndef OPENVDB_TREE_NODEMANAGER_HAS_BEEN_INCLUDED
42 #define OPENVDB_TREE_NODEMANAGER_HAS_BEEN_INCLUDED
44 #include <tbb/parallel_for.h>
45 #include <openvdb/Types.h>
55 template<
typename TreeOrLeafManagerT, Index LEVELS = TreeOrLeafManagerT::RootNodeType::LEVEL>
65 template<
typename NodeT>
70 typedef std::deque<value_type>
ListT;
74 void push_back(NodeT* node) { mList.push_back(node); }
76 NodeT&
operator()(
size_t n)
const { assert(n<mList.size());
return *(mList[n]); }
78 NodeT*&
operator[](
size_t n) { assert(n<mList.size());
return mList[n]; }
84 void resize(
size_t n) { mList.resize(n); }
91 mEnd(end), mBegin(begin), mGrainSize(grainSize), mNodeList(nodeList) {}
94 mEnd(r.mEnd), mBegin(doSplit(r)), mGrainSize(r.mGrainSize),
95 mNodeList(r.mNodeList) {}
97 size_t size()
const {
return mEnd - mBegin; }
103 bool empty()
const {
return !(mBegin < mEnd);}
112 assert(this->isValid());
116 mRange = other.mRange; mPos = other.mPos;
return *
this;
121 NodeT&
operator*()
const {
return mRange.mNodeList(mPos); }
125 size_t pos()
const {
return mPos; }
126 bool isValid()
const {
return mPos>=mRange.mBegin && mPos<=mRange.mEnd; }
128 bool test()
const {
return mPos < mRange.mEnd; }
130 operator bool()
const {
return this->test(); }
132 bool empty()
const {
return !this->test(); }
135 return (mPos != other.mPos) || (&mRange != &other.mRange);
150 size_t mEnd, mBegin, mGrainSize;
156 size_t middle = r.mBegin + (r.mEnd - r.mBegin) / 2u;
165 return NodeRange(0, this->nodeCount(), *
this, grainsize);
168 template<
typename NodeOp>
174 threaded ? tbb::parallel_for(range, *
this) : (*this)(range);
183 template<
typename NodeOp>
184 void foreach(
const NodeOp& op,
bool threaded =
true,
size_t grainSize=1)
186 NodeTransformer<NodeOp> transform(op);
187 transform.run(this->nodeRange(grainSize), threaded);
202 template<
typename NodeT, Index LEVEL>
210 void clear() { mList.clear(); mNext.clear(); }
212 template<
typename ParentT,
typename TreeOrLeafManagerT>
213 void init(ParentT& parent, TreeOrLeafManagerT& tree)
215 parent.getNodes(mList);
216 for (
size_t i=0, n=mList.nodeCount(); i<n; ++i) mNext.init(mList(i), tree);
219 template<
typename ParentT>
223 parent.getNodes(mList);
224 for (
size_t i=0, n=mList.nodeCount(); i<n; ++i) mNext.rebuild(mList(i));
231 return i==NodeT::LEVEL ? mList.nodeCount() : mNext.nodeCount(i);
234 template<
typename NodeOp>
237 mNext.processBottomUp(op, threaded, grainSize);
238 mList.foreach(op, threaded, grainSize);
241 template<
typename NodeOp>
244 mList.foreach(op, threaded, grainSize);
245 mNext.processTopDown(op, threaded, grainSize);
260 template<
typename NodeT>
271 template<
typename ParentT>
272 void rebuild(ParentT& parent) { mList.clear(); parent.getNodes(mList); }
278 template<
typename NodeOp>
281 mList.foreach(op, threaded, grainSize);
284 template<
typename NodeOp>
287 mList.foreach(op, threaded, grainSize);
290 template<
typename ParentT,
typename TreeOrLeafManagerT>
291 void init(ParentT& parent, TreeOrLeafManagerT& tree)
294 if (TreeOrLeafManagerT::DEPTH == 2 && NodeT::LEVEL == 0) {
295 tree.getNodes(mList);
297 parent.getNodes(mList);
314 template<
typename TreeOrLeafManagerT, Index _LEVELS>
318 static const Index LEVELS = _LEVELS;
319 BOOST_STATIC_ASSERT(LEVELS > 0);
321 BOOST_STATIC_ASSERT(RootNodeType::LEVEL >= LEVELS);
323 NodeManager(TreeOrLeafManagerT& tree) : mRoot(tree.root()) { mChain.init(mRoot, tree); }
335 const RootNodeType&
root()
const {
return mRoot; }
345 template<
typename NodeOp>
403 mChain.processBottomUp(op, threaded, grainSize);
407 template<
typename NodeOp>
411 mChain.processTopDown(op, threaded, grainSize);
428 template<
typename TreeOrLeafManagerT>
447 const RootNodeType&
root()
const {
return mRoot; }
454 template<
typename NodeOp>
457 template<
typename NodeOp>
472 template<
typename TreeOrLeafManagerT>
477 BOOST_STATIC_ASSERT(RootNodeType::LEVEL > 0);
483 if (TreeOrLeafManagerT::DEPTH == 2 && NodeT0::LEVEL == 0) {
484 tree.getNodes(mList0);
486 mRoot.getNodes(mList0);
498 void rebuild() { mList0.clear(); mRoot.getNodes(mList0); }
501 const RootNodeType&
root()
const {
return mRoot; }
510 template<
typename NodeOp>
513 mList0.foreach(op, threaded, grainSize);
517 template<
typename NodeOp>
521 mList0.foreach(op, threaded, grainSize);
526 typedef typename NodeT1::ChildNodeType
NodeT0;
541 template<
typename TreeOrLeafManagerT>
546 BOOST_STATIC_ASSERT(RootNodeType::LEVEL > 1);
551 mRoot.getNodes(mList1);
554 if (TreeOrLeafManagerT::DEPTH == 2 && NodeT0::LEVEL == 0) {
555 tree.getNodes(mList0);
557 for (
size_t i=0, n=mList1.nodeCount(); i<n; ++i) mList1(i).getNodes(mList0);
565 void clear() { mList0.clear(); mList1.clear(); }
572 mRoot.getNodes(mList1);
573 for (
size_t i=0, n=mList1.nodeCount(); i<n; ++i) mList1(i).getNodes(mList0);
577 const RootNodeType&
root()
const {
return mRoot; }
586 return i==0 ? mList0.nodeCount() : i==1 ? mList1.nodeCount() : 0;
589 template<
typename NodeOp>
592 mList0.foreach(op, threaded, grainSize);
593 mList1.foreach(op, threaded, grainSize);
597 template<
typename NodeOp>
601 mList1.foreach(op, threaded, grainSize);
602 mList0.foreach(op, threaded, grainSize);
607 typedef typename NodeT2::ChildNodeType
NodeT1;
608 typedef typename NodeT1::ChildNodeType
NodeT0;
626 template<
typename TreeOrLeafManagerT>
631 BOOST_STATIC_ASSERT(RootNodeType::LEVEL > 2);
636 mRoot.getNodes(mList2);
637 for (
size_t i=0, n=mList2.nodeCount(); i<n; ++i) mList2(i).getNodes(mList1);
640 if (TreeOrLeafManagerT::DEPTH == 2 && NodeT0::LEVEL == 0) {
641 tree.getNodes(mList0);
643 for (
size_t i=0, n=mList1.nodeCount(); i<n; ++i) mList1(i).getNodes(mList0);
651 void clear() { mList0.clear(); mList1.clear(); mList2.clear(); }
658 mRoot.getNodes(mList2);
659 for (
size_t i=0, n=mList2.nodeCount(); i<n; ++i) mList2(i).getNodes(mList1);
660 for (
size_t i=0, n=mList1.nodeCount(); i<n; ++i) mList1(i).getNodes(mList0);
664 const RootNodeType&
root()
const {
return mRoot; }
667 Index64 nodeCount()
const {
return mList0.nodeCount()+mList1.nodeCount()+mList2.nodeCount(); }
673 return i==0 ? mList0.nodeCount() : i==1 ? mList1.nodeCount()
674 : i==2 ? mList2.nodeCount() : 0;
677 template<
typename NodeOp>
680 mList0.foreach(op, threaded, grainSize);
681 mList1.foreach(op, threaded, grainSize);
682 mList2.foreach(op, threaded, grainSize);
686 template<
typename NodeOp>
690 mList2.foreach(op, threaded, grainSize);
691 mList1.foreach(op, threaded, grainSize);
692 mList0.foreach(op, threaded, grainSize);
697 typedef typename NodeT3::ChildNodeType
NodeT2;
698 typedef typename NodeT2::ChildNodeType
NodeT1;
699 typedef typename NodeT1::ChildNodeType
NodeT0;
719 template<
typename TreeOrLeafManagerT>
724 BOOST_STATIC_ASSERT(RootNodeType::LEVEL > 3);
729 mRoot.getNodes(mList3);
730 for (
size_t i=0, n=mList3.nodeCount(); i<n; ++i) mList3(i).getNodes(mList2);
731 for (
size_t i=0, n=mList2.nodeCount(); i<n; ++i) mList2(i).getNodes(mList1);
734 if (TreeOrLeafManagerT::DEPTH == 2 && NodeT0::LEVEL == 0) {
735 tree.getNodes(mList0);
737 for (
size_t i=0, n=mList1.nodeCount(); i<n; ++i) mList1(i).getNodes(mList0);
745 void clear() { mList0.clear(); mList1.clear(); mList2.clear(); mList3.clear; }
752 mRoot.getNodes(mList3);
753 for (
size_t i=0, n=mList3.nodeCount(); i<n; ++i) mList3(i).getNodes(mList2);
754 for (
size_t i=0, n=mList2.nodeCount(); i<n; ++i) mList2(i).getNodes(mList1);
755 for (
size_t i=0, n=mList1.nodeCount(); i<n; ++i) mList1(i).getNodes(mList0);
759 const RootNodeType&
root()
const {
return mRoot; }
764 return mList0.nodeCount() + mList1.nodeCount()
765 + mList2.nodeCount() + mList3.nodeCount();
772 return i==0 ? mList0.nodeCount() : i==1 ? mList1.nodeCount() :
773 i==2 ? mList2.nodeCount() : i==3 ? mList3.nodeCount() : 0;
776 template<
typename NodeOp>
779 mList0.foreach(op, threaded, grainSize);
780 mList1.foreach(op, threaded, grainSize);
781 mList2.foreach(op, threaded, grainSize);
782 mList3.foreach(op, threaded, grainSize);
786 template<
typename NodeOp>
790 mList3.foreach(op, threaded, grainSize);
791 mList2.foreach(op, threaded, grainSize);
792 mList1.foreach(op, threaded, grainSize);
793 mList0.foreach(op, threaded, grainSize);
798 typedef typename NodeT4::ChildNodeType
NodeT3;
799 typedef typename NodeT3::ChildNodeType
NodeT2;
800 typedef typename NodeT2::ChildNodeType
NodeT1;
801 typedef typename NodeT1::ChildNodeType
NodeT0;
822 #endif // OPENVDB_TREE_NODEMANAGER_HAS_BEEN_INCLUDED
RootNodeType NodeT4
Definition: NodeManager.h:797
std::deque< value_type > ListT
Definition: NodeManager.h:70
TreeOrLeafManagerT::RootNodeType RootNodeType
Definition: NodeManager.h:723
bool empty() const
Return true if this iterator is exhausted.
Definition: NodeManager.h:132
void rebuild(ParentT &parent)
Definition: NodeManager.h:272
void rebuild()
Clear and recache all the tree nodes from the tree. This is required if tree nodes have been added or...
Definition: NodeManager.h:569
NodeList< NodeT0 > ListT0
Definition: NodeManager.h:527
bool empty() const
Definition: NodeManager.h:103
NodeT *& operator[](size_t n)
Definition: NodeManager.h:78
Index64 nodeCount(Index i) const
Return the number of cached nodes at level i, where 0 corresponds to the lowest level.
Definition: NodeManager.h:584
ListT3 mList3
Definition: NodeManager.h:809
TreeOrLeafManagerT::RootNodeType RootNodeType
Definition: NodeManager.h:630
NodeT & operator()(size_t n) const
Definition: NodeManager.h:76
uint64_t Index64
Definition: Types.h:58
TreeOrLeafManagerT::RootNodeType RootNodeType
Definition: NodeManager.h:432
bool is_divisible() const
Definition: NodeManager.h:105
Iterator begin() const
Definition: NodeManager.h:145
TreeOrLeafManagerT::RootNodeType RootNodeType
Definition: NodeManager.h:476
Definition: NodeManager.h:86
NodeList< NodeT > mList
Definition: NodeManager.h:302
void processTopDown(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Threaded method that applies a user-supplied functor to all the nodes in the tree.
Definition: NodeManager.h:408
void clear()
Clear all the cached tree nodes.
Definition: NodeManager.h:494
NodeT4 & mRoot
Definition: NodeManager.h:808
size_t size() const
Definition: NodeManager.h:97
Index64 nodeCount() const
Return the total number of cached nodes (excluding the root node)
Definition: NodeManager.h:762
const NodeList & nodeList() const
Definition: NodeManager.h:101
void clear()
Clear all the cached tree nodes.
Definition: NodeManager.h:440
RootNodeType NodeT3
Definition: NodeManager.h:696
Mat3< typename promote< T0, T1 >::type > operator*(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Matrix multiplication.
Definition: Mat3.h:608
Index64 nodeCount(Index i) const
Definition: NodeManager.h:229
ListT2 mList2
Definition: NodeManager.h:810
NodeManagerLink< typename RootNodeType::ChildNodeType, LEVELS-1 > mChain
Definition: NodeManager.h:417
NodeManager(TreeOrLeafManagerT &tree)
Definition: NodeManager.h:323
ListT2 mList2
Definition: NodeManager.h:706
void processBottomUp(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:590
Index64 nodeCount() const
Return the total number of cached nodes (excluding the root node)
Definition: NodeManager.h:667
void processBottomUp(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Threaded method that applies a user-supplied functor to all the nodes in the tree.
Definition: NodeManager.h:401
NodeT2::ChildNodeType NodeT1
Definition: NodeManager.h:607
ListT0 mList0
Definition: NodeManager.h:615
const RootNodeType & root() const
Return a reference to the root node.
Definition: NodeManager.h:577
NodeList< NodeT > mList
Definition: NodeManager.h:249
NodeList< NodeT0 > ListT0
Definition: NodeManager.h:703
RootNodeType NodeT2
Definition: NodeManager.h:606
NodeList< NodeT0 > ListT0
Definition: NodeManager.h:611
NodeList< NodeT0 > ListT0
Definition: NodeManager.h:806
RootNodeType NodeT1
Definition: NodeManager.h:525
Index64 nodeCount(Index i) const
Return the number of cached nodes at level i, where 0 corresponds to the lowest level.
Definition: NodeManager.h:770
ListT1 mList1
Definition: NodeManager.h:614
ListT0 mList0
Definition: NodeManager.h:708
Index64 nodeCount(Index i) const
Return the number of cached nodes at level i, where 0 corresponds to the lowest level.
Definition: NodeManager.h:342
This class caches tree nodes of a specific type in a linear array.
Definition: NodeManager.h:66
ListT0 mList0
Definition: NodeManager.h:812
void clear()
Clear all the cached tree nodes.
Definition: NodeManager.h:328
#define OPENVDB_VERSION_NAME
Definition: version.h:43
Index64 nodeCount(Index i) const
Return the number of cached nodes at level i, where 0 corresponds to the lowest level.
Definition: NodeManager.h:671
bool operator==(const Iterator &other) const
Definition: NodeManager.h:137
void processBottomUp(const NodeOp &op, bool threaded, size_t grainSize)
Definition: NodeManager.h:279
void rebuild()
Clear and recache all the tree nodes from the tree. This is required if tree nodes have been added or...
Definition: NodeManager.h:498
NodeRange(NodeRange &r, tbb::split)
Definition: NodeManager.h:93
void processBottomUp(const NodeOp &op, bool, size_t)
Definition: NodeManager.h:455
size_t pos() const
Return the index into the list of the current node.
Definition: NodeManager.h:125
Index64 nodeCount() const
Definition: NodeManager.h:227
const RootNodeType & root() const
Return a reference to the root node.
Definition: NodeManager.h:447
Index32 Index
Definition: Types.h:59
void rebuild()
Clear and recache all the tree nodes from the tree. This is required if tree nodes have been added or...
Definition: NodeManager.h:444
NodeRange(size_t begin, size_t end, const NodeList &nodeList, size_t grainSize=1)
Definition: NodeManager.h:90
Definition: NodeManager.h:107
NodeT3::ChildNodeType NodeT2
Definition: NodeManager.h:799
const RootNodeType & root() const
Return a reference to the root node.
Definition: NodeManager.h:501
Index64 nodeCount() const
Return the total number of cached nodes (excluding the root node)
Definition: NodeManager.h:580
size_t grainsize() const
Definition: NodeManager.h:99
NodeRange nodeRange(size_t grainsize=1) const
Return a TBB-compatible NodeRange.
Definition: NodeManager.h:163
Index64 nodeCount() const
Definition: NodeManager.h:80
Index64 nodeCount() const
Return the total number of cached nodes (excluding the root node)
Definition: NodeManager.h:450
const NodeRange & nodeRange() const
Definition: NodeManager.h:138
void clear()
Clear all the cached tree nodes.
Definition: NodeManager.h:745
NodeT3 & mRoot
Definition: NodeManager.h:705
void processTopDown(const NodeOp &op, bool, size_t)
Definition: NodeManager.h:458
virtual ~NodeManagerLink()
Definition: NodeManager.h:266
Definition: Exceptions.h:39
Index64 nodeCount() const
Return the total number of cached nodes (excluding the root node)
Definition: NodeManager.h:504
NodeT3::ChildNodeType NodeT2
Definition: NodeManager.h:697
void clear()
Clear all the cached tree nodes.
Definition: NodeManager.h:651
void init(ParentT &parent, TreeOrLeafManagerT &tree)
Definition: NodeManager.h:291
void clear()
Clear all the cached tree nodes.
Definition: NodeManager.h:269
NodeT * value_type
Definition: NodeManager.h:69
void processBottomUp(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:511
NodeT4::ChildNodeType NodeT3
Definition: NodeManager.h:798
void processTopDown(const NodeOp &op, bool threaded, size_t grainSize)
Definition: NodeManager.h:242
NodeManager(TreeOrLeafManagerT &tree)
Definition: NodeManager.h:634
NodeT1::ChildNodeType NodeT0
Definition: NodeManager.h:608
void processTopDown(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:598
Iterator & operator=(const Iterator &other)
Definition: NodeManager.h:114
void processTopDown(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:518
void clear()
Clear all the cached tree nodes.
Definition: NodeManager.h:565
void processBottomUp(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:678
virtual ~NodeManagerLink()
Definition: NodeManager.h:208
NodeManagerLink()
Definition: NodeManager.h:206
void processBottomUp(const NodeOp &op, bool threaded, size_t grainSize)
Definition: NodeManager.h:235
virtual ~NodeManager()
Definition: NodeManager.h:437
NodeManagerLink()
Definition: NodeManager.h:264
RootNodeType & mRoot
Definition: NodeManager.h:416
void processBottomUp(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:777
virtual ~NodeManager()
Definition: NodeManager.h:491
NodeManager(TreeOrLeafManagerT &tree)
Definition: NodeManager.h:727
void processTopDown(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:687
NodeList()
Definition: NodeManager.h:72
const RootNodeType & root() const
Return a reference to the root node.
Definition: NodeManager.h:335
Index64 nodeCount() const
Return the total number of cached nodes (excluding the root node)
Definition: NodeManager.h:338
Index64 nodeCount(Index i) const
Return the number of cached nodes at level i, where 0 corresponds to the lowest level.
Definition: NodeManager.h:508
bool test() const
Return true if this iterator is not yet exhausted.
Definition: NodeManager.h:128
bool operator!=(const Iterator &other) const
Definition: NodeManager.h:133
void processTopDown(const NodeOp &op, bool threaded=true, size_t grainSize=1)
Definition: NodeManager.h:787
void rebuild()
Clear and recache all the tree nodes from the tree. This is required if tree nodes have been added or...
Definition: NodeManager.h:655
NodeT2 & mRoot
Definition: NodeManager.h:613
Index64 nodeCount() const
Definition: NodeManager.h:274
ListT1 mList1
Definition: NodeManager.h:707
To facilitate threading over the nodes of a tree, cache node pointers in linear arrays, one for each level of the tree.
Definition: NodeManager.h:56
void clear()
Definition: NodeManager.h:210
void init(ParentT &parent, TreeOrLeafManagerT &tree)
Definition: NodeManager.h:213
ListT0 mList0
Definition: NodeManager.h:530
Iterator & operator++()
Advance to the next node.
Definition: NodeManager.h:119
virtual ~NodeManager()
Definition: NodeManager.h:742
NodeManager(TreeOrLeafManagerT &tree)
Definition: NodeManager.h:480
ListT1 mList1
Definition: NodeManager.h:811
TreeOrLeafManagerT::RootNodeType RootNodeType
Definition: NodeManager.h:545
NodeManagerLink< typename NodeT::ChildNodeType, LEVEL-1 > mNext
Definition: NodeManager.h:250
const RootNodeType & root() const
Return a reference to the root node.
Definition: NodeManager.h:759
ListT mList
Definition: NodeManager.h:191
NodeManager(TreeOrLeafManagerT &tree)
Definition: NodeManager.h:435
NodeT2::ChildNodeType NodeT1
Definition: NodeManager.h:698
void rebuild()
Clear and recache all the tree nodes from the tree. This is required if tree nodes have been added or...
Definition: NodeManager.h:749
void rebuild()
Clear and recache all the tree nodes from the tree. This is required if tree nodes have been added or...
Definition: NodeManager.h:332
bool isValid() const
Definition: NodeManager.h:126
virtual ~NodeManager()
Definition: NodeManager.h:648
NodeList< NodeT2 > ListT2
Definition: NodeManager.h:701
NodeT & operator*() const
Return a reference to the node to which this iterator is pointing.
Definition: NodeManager.h:121
virtual ~NodeManager()
Definition: NodeManager.h:562
const RootNodeType & root() const
Return a reference to the root node.
Definition: NodeManager.h:664
TreeOrLeafManagerT::RootNodeType RootNodeType
Definition: NodeManager.h:320
NodeManager(TreeOrLeafManagerT &tree)
Definition: NodeManager.h:549
Iterator end() const
Definition: NodeManager.h:147
NodeT2::ChildNodeType NodeT1
Definition: NodeManager.h:800
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:71
NodeList< NodeT2 > ListT2
Definition: NodeManager.h:804
void rebuild(ParentT &parent)
Definition: NodeManager.h:220
NodeList< NodeT3 > ListT3
Definition: NodeManager.h:803
Index64 nodeCount(Index) const
Definition: NodeManager.h:276
NodeList< NodeT1 > ListT1
Definition: NodeManager.h:805
NodeT1::ChildNodeType NodeT0
Definition: NodeManager.h:526
void processTopDown(const NodeOp &op, bool threaded, size_t grainSize)
Definition: NodeManager.h:285
RootNodeType & mRoot
Definition: NodeManager.h:461
virtual ~NodeManager()
Definition: NodeManager.h:325
void clear()
Definition: NodeManager.h:82
NodeList< NodeT1 > ListT1
Definition: NodeManager.h:702
void resize(size_t n)
Definition: NodeManager.h:84
NodeT1::ChildNodeType NodeT0
Definition: NodeManager.h:699
Iterator(const NodeRange &range, size_t pos)
Definition: NodeManager.h:110
NodeT1 & mRoot
Definition: NodeManager.h:529
NodeT * operator->() const
Return a pointer to the node to which this iterator is pointing.
Definition: NodeManager.h:123
Index64 nodeCount(Index) const
Definition: NodeManager.h:452
This class is a link in a chain that each caches tree nodes of a specific type in a linear array...
Definition: NodeManager.h:203
void push_back(NodeT *node)
Definition: NodeManager.h:74
NodeT1::ChildNodeType NodeT0
Definition: NodeManager.h:801
NodeList< NodeT1 > ListT1
Definition: NodeManager.h:610