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);
164 this->AdvanceTo(
source->GetCurrentFlatIndex());
168 void AdvanceTo(
const unsigned int flatIdx)
170 assert(this->Iterator !=
nullptr);
180 assert(this->Iterator !=
nullptr);
187 assert(this->Iterator !=
nullptr);
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 256 result->InitTraversal();
267 #endif // __VTK_WRAP__ 269 #endif // vtkDataObjectTreeRange_h
reference operator*() const
typename Superclass::value_type value_type
static vtkSmartPointer< InternalIterator > Take(InternalIterator *t)
Transfer ownership of one reference to the given VTK object to a new smart pointer.
provides implementation for most abstract methods in the superclass vtkCompositeDataSet ...
vtk::CompositeDataSetNodeReference< vtkDataObjectTreeIterator, DataObjectTreeIterator > DataObjectTreeIteratorReference
typename Superclass::iterator_category iterator_category
DataObjectTreeIterator operator++(int)
void GoToNextItem() override
Move the iterator to the next item in the collection.
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph *>::edge_descriptor e, vtkGraph *)
DataObjectTreeIterator(const DataObjectTreeIterator &o)
int IsDoneWithTraversal() override
Test whether the iterator is finished with the traversal.
friend bool operator==(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
friend bool operator!=(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
vtkDataObjectTree * GetDataObjectTree() const noexcept
const_iterator cbegin() const
pointer operator->() const
typename Superclass::pointer pointer
DataObjectTreeRange(vtkDataObjectTree *cds, DataObjectTreeOptions opts=DataObjectTreeOptions::None)
virtual void InitTraversal()
Begin iterating over the composite dataset structure.
typename Superclass::reference reference
virtual void SetVisitOnlyLeaves(vtkTypeBool)
If VisitOnlyLeaves is true, the iterator will only visit nodes (sub-datasets) that are not composite...
virtual vtkDataObjectTreeIterator * NewTreeIterator()
Return a new iterator (the iterator has to be deleted by user).
DataObjectTreeIterator & operator++()
unsigned int GetCurrentFlatIndex() override
Flat index is an index obtained by traversing the tree in preorder.
A reference proxy into a vtkCompositeDataSet, obtained by dereferencing an iterator from the vtk::Ran...
virtual void SetDataSet(vtkCompositeDataSet *ds)
Set the composite dataset this iterator is iterating over.
virtual void SetTraverseSubTree(vtkTypeBool)
If TraverseSubTree is set to true, the iterator will visit the entire tree structure, otherwise it only visits the first level children.
DataObjectTreeOptions GetOptions() const noexcept
superclass for composite data iterators
typename Superclass::difference_type difference_type
friend void swap(DataObjectTreeIterator &lhs, DataObjectTreeIterator &rhs) noexcept
DataObjectTreeIterator(SmartIterator &&iter) noexcept
DataObjectTreeIterator() noexcept
general representation of visualization data
const_iterator cend() const
virtual void SetSkipEmptyNodes(vtkTypeBool)
If SkipEmptyNodes is true, then nullptr datasets will be skipped.