16#ifndef vtkDataObjectTreeRange_h
17#define vtkDataObjectTreeRange_h
57 :
public std::iterator<std::forward_iterator_tag, vtkDataObject*, int,
58 DataObjectTreeIteratorReference, DataObjectTreeIteratorReference>
61 using Superclass = std::iterator<std::forward_iterator_tag,
vtkDataObject*, int,
70 using pointer =
typename Superclass::pointer;
74 : Iterator(o.Iterator ? SmartIterator::Take(o.Iterator->NewInstance()) : nullptr)
76 this->CopyState(o.Iterator);
84 this->CopyState(o.Iterator);
108 InternalIterator* l = lhs.Iterator;
109 InternalIterator* r = rhs.Iterator;
131 return !(lhs == rhs);
137 swap(lhs.Iterator, rhs.Iterator);
146 : Iterator(std::move(iter))
153 : Iterator{
nullptr }
158 void CopyState(InternalIterator*
source)
162 assert(this->Iterator !=
nullptr);
168 this->AdvanceTo(
source->GetCurrentFlatIndex());
172 void AdvanceTo(
const unsigned int flatIdx)
174 assert(this->Iterator !=
nullptr);
175 assert(this->Iterator->GetCurrentFlatIndex() <= flatIdx);
176 while (this->Iterator->GetCurrentFlatIndex() < flatIdx)
184 assert(this->Iterator !=
nullptr);
185 assert(!this->Iterator->IsDoneWithTraversal());
186 this->Iterator->GoToNextItem();
191 assert(this->Iterator !=
nullptr);
192 assert(!this->Iterator->IsDoneWithTraversal());
196 mutable SmartIterator Iterator;
217 : DataObjectTree(cds)
220 assert(this->DataObjectTree);
231 auto iter = this->NewIterator();
232 iter->InitTraversal();
233 while (!iter->IsDoneWithTraversal())
236 iter->GoToNextItem();
252 SmartIterator NewIterator()
const
257 result->SetSkipEmptyNodes((this->Options & Opts::SkipEmptyNodes) != Opts::None);
258 result->SetVisitOnlyLeaves((this->Options & Opts::VisitOnlyLeaves) != Opts::None);
259 result->SetTraverseSubTree((this->Options & Opts::TraverseSubTree) != Opts::None);
260 result->InitTraversal();
virtual void SetDataSet(vtkCompositeDataSet *ds)
Set the composite dataset this iterator is iterating over.
virtual void InitTraversal()
Begin iterating over the composite dataset structure.
virtual void SetSkipEmptyNodes(vtkTypeBool)
If SkipEmptyNodes is true, then nullptr datasets will be skipped.
superclass for composite data iterators
int IsDoneWithTraversal() override
Test whether the iterator is finished with the traversal.
virtual void SetTraverseSubTree(vtkTypeBool)
If TraverseSubTree is set to true, the iterator will visit the entire tree structure,...
unsigned int GetCurrentFlatIndex() override
Flat index is an index obtained by traversing the tree in preorder.
virtual void SetVisitOnlyLeaves(vtkTypeBool)
If VisitOnlyLeaves is true, the iterator will only visit nodes (sub-datasets) that are not composite.
provides implementation for most abstract methods in the superclass vtkCompositeDataSet
virtual vtkDataObjectTreeIterator * NewTreeIterator()
Return a new iterator (the iterator has to be deleted by user).
general representation of visualization data
Hold a reference to a vtkObjectBase instance.
static vtkSmartPointer< InternalIterator > Take(InternalIterator *t)
A reference proxy into a vtkCompositeDataSet, obtained by dereferencing an iterator from the vtk::Ran...
vtk::CompositeDataSetNodeReference< vtkDataObjectTreeIterator, DataObjectTreeIterator > DataObjectTreeIteratorReference
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
typename Superclass::value_type value_type
pointer operator->() const
DataObjectTreeIterator(const DataObjectTreeIterator &o)
DataObjectTreeIterator(DataObjectTreeIterator &&) noexcept=default
friend struct DataObjectTreeRange
DataObjectTreeIterator operator++(int)
DataObjectTreeIterator(SmartIterator &&iter) noexcept
typename Superclass::pointer pointer
reference operator*() const
DataObjectTreeIterator & operator++()
typename Superclass::reference reference
friend bool operator!=(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
typename Superclass::iterator_category iterator_category
DataObjectTreeIterator() noexcept
friend bool operator==(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
friend void swap(DataObjectTreeIterator &lhs, DataObjectTreeIterator &rhs) noexcept
typename Superclass::difference_type difference_type
vtkDataObjectTree * GetDataObjectTree() const noexcept
DataObjectTreeIterator const_iterator
DataObjectTreeOptions GetOptions() const noexcept
vtkDataObject * value_type
DataObjectTreeRange(vtkDataObjectTree *cds, DataObjectTreeOptions opts=DataObjectTreeOptions::None)
DataObjectTreeIterator iterator
const_iterator cbegin() const
const DataObjectTreeIteratorReference const_reference
DataObjectTreeIteratorReference reference
const_iterator cend() const
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)