16 #ifndef vtkCompositeDataSetRange_h
17 #define vtkCompositeDataSetRange_h
50 struct CompositeDataSetRange;
51 struct CompositeDataSetIterator;
59 :
public std::iterator<std::forward_iterator_tag, vtkDataObject*, int,
60 CompositeDataSetIteratorReference, CompositeDataSetIteratorReference>
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->InitTraversal();
162 this->AdvanceTo(
source->GetCurrentFlatIndex());
166 void AdvanceTo(
const unsigned int flatIdx)
168 assert(this->Iterator !=
nullptr);
169 assert(this->Iterator->GetCurrentFlatIndex() <= flatIdx);
170 while (this->Iterator->GetCurrentFlatIndex() < flatIdx)
178 assert(this->Iterator !=
nullptr);
179 assert(!this->Iterator->IsDoneWithTraversal());
180 this->Iterator->GoToNextItem();
185 assert(this->Iterator !=
nullptr);
186 assert(!this->Iterator->IsDoneWithTraversal());
190 mutable SmartIterator Iterator;
213 : CompositeDataSet(cds)
216 assert(this->CompositeDataSet);
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->InitTraversal();
265 #endif // __VTK_WRAP__
267 #endif // vtkCompositeDataSetRange_h