4#ifndef vtkCollectionRange_h
5#define vtkCollectionRange_h
18VTK_ABI_NAMESPACE_BEGIN
20template <
typename CollectionType>
22template <
typename CollectionType>
32template <
typename CollectionType,
typename T = CollectionType>
38template <
typename CollectionType>
62 static auto GetType(...) ->
decltype(std::declval<T>().GetNextItemAsObject());
66 static auto GetType(
int) ->
decltype(std::declval<T>().GetNextItem());
68 using PointerType =
decltype(GetType<CollectionType>(0));
72 using Type =
typename std::remove_pointer<PointerType>::type;
88template <
typename CollectionType>
119 auto it = this->Iterator;
130 return lhs.Iterator == rhs.Iterator;
135 return lhs.Iterator != rhs.Iterator;
141 swap(lhs.Iterator, rhs.Iterator);
148 void Increment() noexcept
153 ItemType* GetItem() const noexcept {
return static_cast<ItemType*
>(*this->Iterator); }
155 std::vector<vtkObject*>::iterator Iterator;
162template <
typename CollectionType>
181 assert(this->Collection);
186 size_type size() const noexcept {
return this->Collection->GetNumberOfItems(); }
Hold a reference to a vtkObjectBase instance.
typename std::enable_if< IsCollection< CollectionType >::value, T >::type EnableIfIsCollection
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
CollectionIterator operator++(int) noexcept
std::forward_iterator_tag iterator_category
typename GetCollectionItemType< CollectionType >::Type * pointer
reference operator*() const noexcept
CollectionIterator & operator++() noexcept
CollectionIterator & operator=(const CollectionIterator &o) noexcept=default
CollectionIterator(std::vector< vtkObject * >::iterator iterator) noexcept
friend void swap(CollectionIterator &lhs, CollectionIterator &rhs) noexcept
typename GetCollectionItemType< CollectionType >::Type * reference
pointer operator->() const noexcept
CollectionIterator(const CollectionIterator &o) noexcept=default
friend bool operator==(const CollectionIterator &lhs, const CollectionIterator &rhs) noexcept
typename GetCollectionItemType< CollectionType >::Type * value_type
friend bool operator!=(const CollectionIterator &lhs, const CollectionIterator &rhs) noexcept
CollectionRange(CollectionType *coll) noexcept
ItemType * const_reference
CollectionType * GetCollection() const noexcept
CollectionIterator< CollectionType > const_iterator
typename GetCollectionItemType< CollectionType >::Type ItemType
size_type size() const noexcept
CollectionIterator< CollectionType > iterator
const_iterator cbegin() const
const_iterator cend() const
typename std::remove_pointer< PointerType >::type Type