4#ifndef vtkDataObjectTreeRange_h
5#define vtkDataObjectTreeRange_h
18VTK_ABI_NAMESPACE_BEGIN
32VTK_ABI_NAMESPACE_BEGIN
40VTK_ABI_NAMESPACE_BEGIN
42struct DataObjectTreeRange;
43struct DataObjectTreeIterator;
62 : Iterator(o.Iterator ?
SmartIterator::Take(o.Iterator->NewInstance()) : nullptr)
64 this->CopyState(o.Iterator);
72 this->CopyState(o.Iterator);
119 return !(lhs == rhs);
125 swap(lhs.Iterator, rhs.Iterator);
134 : Iterator(std::move(iter))
141 : Iterator{
nullptr }
146 void CopyState(InternalIterator*
source)
150 assert(this->Iterator !=
nullptr);
156 this->AdvanceTo(
source->GetCurrentFlatIndex());
160 void AdvanceTo(
const unsigned int flatIdx)
162 assert(this->Iterator !=
nullptr);
172 assert(this->Iterator !=
nullptr);
179 assert(this->Iterator !=
nullptr);
184 mutable SmartIterator Iterator;
205 : DataObjectTree(cds)
208 assert(this->DataObjectTree);
219 auto iter = this->NewIterator();
220 iter->InitTraversal();
221 while (!iter->IsDoneWithTraversal())
224 iter->GoToNextItem();
240 SmartIterator NewIterator()
const
245 result->SetSkipEmptyNodes((this->Options & Opts::SkipEmptyNodes) != Opts::None);
246 result->SetVisitOnlyLeaves((this->Options & Opts::VisitOnlyLeaves) != Opts::None);
247 result->SetTraverseSubTree((this->Options & Opts::TraverseSubTree) != Opts::None);
248 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,...
void GoToNextItem() override
Move the iterator to the next item in the collection.
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
static vtkSmartPointer< InternalIterator > Take(InternalIterator *t)
Transfer ownership of one reference to the given VTK object to a new smart pointer.
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.
pointer operator->() const
DataObjectTreeIterator(const DataObjectTreeIterator &o)
DataObjectTreeIterator(DataObjectTreeIterator &&) noexcept=default
DataObjectTreeIterator operator++(int)
DataObjectTreeIterator(SmartIterator &&iter) noexcept
reference operator*() const
DataObjectTreeIterator & operator++()
friend bool operator!=(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
DataObjectTreeIterator() noexcept
std::forward_iterator_tag iterator_category
friend bool operator==(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
friend void swap(DataObjectTreeIterator &lhs, DataObjectTreeIterator &rhs) noexcept
vtkDataObjectTree * GetDataObjectTree() const noexcept
DataObjectTreeOptions GetOptions() const noexcept
DataObjectTreeRange(vtkDataObjectTree *cds, DataObjectTreeOptions opts=DataObjectTreeOptions::None)
const_iterator cbegin() const
const_iterator cend() const
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)