16 #ifndef vtkDataObjectTreeRange_h
17 #define vtkDataObjectTreeRange_h
52 struct DataObjectTreeRange;
53 struct DataObjectTreeIterator;
59 :
public std::iterator<std::forward_iterator_tag, vtkDataObject*, int,
60 DataObjectTreeIteratorReference, DataObjectTreeIteratorReference>
63 using Superclass = std::iterator<std::forward_iterator_tag,
vtkDataObject*, int,
72 using pointer =
typename Superclass::pointer;
76 : Iterator(o.Iterator ?
SmartIterator::Take(o.Iterator->NewInstance()) : nullptr)
78 this->CopyState(o.Iterator);
86 this->CopyState(o.Iterator);
133 return !(lhs == rhs);
139 swap(lhs.Iterator, rhs.Iterator);
154 void CopyState(InternalIterator*
source)
158 assert(this->Iterator !=
nullptr);
159 this->Iterator->SetDataSet(
source->GetDataSet());
160 this->Iterator->SetSkipEmptyNodes(
source->GetSkipEmptyNodes());
161 this->Iterator->SetVisitOnlyLeaves(
source->GetVisitOnlyLeaves());
162 this->Iterator->SetTraverseSubTree(
source->GetTraverseSubTree());
163 this->Iterator->InitTraversal();
164 this->AdvanceTo(
source->GetCurrentFlatIndex());
168 void AdvanceTo(
const unsigned int flatIdx)
170 assert(this->Iterator !=
nullptr);
171 assert(this->Iterator->GetCurrentFlatIndex() <= flatIdx);
172 while (this->Iterator->GetCurrentFlatIndex() < flatIdx)
180 assert(this->Iterator !=
nullptr);
181 assert(!this->Iterator->IsDoneWithTraversal());
182 this->Iterator->GoToNextItem();
187 assert(this->Iterator !=
nullptr);
188 assert(!this->Iterator->IsDoneWithTraversal());
192 mutable SmartIterator Iterator;
213 : DataObjectTree(cds)
216 assert(this->DataObjectTree);
227 auto iter = this->NewIterator();
228 iter->InitTraversal();
229 while (!iter->IsDoneWithTraversal())
232 iter->GoToNextItem();
248 SmartIterator NewIterator()
const
253 result->SetSkipEmptyNodes((this->Options & Opts::SkipEmptyNodes) != Opts::None);
254 result->SetVisitOnlyLeaves((this->Options & Opts::VisitOnlyLeaves) != Opts::None);
255 result->SetTraverseSubTree((this->Options & Opts::TraverseSubTree) != Opts::None);
256 result->InitTraversal();
267 #endif // __VTK_WRAP__
269 #endif // vtkDataObjectTreeRange_h