HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
indexedDataIterator.h
Go to the documentation of this file.
1 //
2 // Copyright 2025 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_EXEC_VDF_INDEXED_DATA_ITERATOR_H
8 #define PXR_EXEC_VDF_INDEXED_DATA_ITERATOR_H
9 
10 /// \file
11 
12 #include "pxr/pxr.h"
13 
14 #include <iterator>
15 #include <vector>
16 
18 
19 /// This is a simple "iterator filter" that erases the type and traits of the
20 /// container used by VdfIndexedData<T> to store its indices and data. It
21 /// allows VdfIndexedData to supply a simple iterator with few guarantees or
22 /// inferences, which client code can use with e.g. STL algorithms, while still
23 /// preserving most of VdfIndexedData's ability to change container
24 /// implementations without disrupting clients.
25 ///
26 /// This models a const_iterator with forward traversal capability (only).
27 ///
28 template <typename IteratedType>
30 {
31 public:
32  using BaseIterator = typename std::vector<IteratedType>::const_iterator;
33 
34  using iterator_category = std::forward_iterator_tag;
37  using pointer = typename BaseIterator::pointer;
38  using difference_type = typename BaseIterator::difference_type;
39 
40  // Only default construction is publicly allowed, and the resulting
41  // object is invalid.
42  VdfIndexedDataIterator() = default;
43 
44  reference operator*() const { return *_baseIterator; }
45  pointer operator->() const { return &(*_baseIterator); }
46 
48  ++_baseIterator;
49  return *this;
50  }
51 
54  ++_baseIterator;
55  return r;
56  }
57 
58  bool operator==(const VdfIndexedDataIterator &rhs) const {
59  return _baseIterator == rhs._baseIterator;
60  }
61 
62  bool operator!=(const VdfIndexedDataIterator &rhs) const {
63  return _baseIterator != rhs._baseIterator;
64  }
65 
66 private:
67  // Allow VdfIndexedData (only) to construct these.
68  template <typename T>
69  friend class VdfIndexedData;
70 
71  explicit VdfIndexedDataIterator(const BaseIterator& iter) :
72  _baseIterator(iter) {}
73 
74  // The underlying base iterator
75  BaseIterator _baseIterator;
76 };
77 
79 
80 #endif // #ifndef PXR_EXEC_VDF_INDEXED_DATA_ITERATOR_H
bool operator==(const VdfIndexedDataIterator &rhs) const
#define PXR_NAMESPACE_OPEN_SCOPE
Definition: pxr.h:73
typename BaseIterator::pointer pointer
std::forward_iterator_tag iterator_category
uint64 value_type
Definition: GA_PrimCompat.h:29
typename BaseIterator::reference reference
typename BaseIterator::value_type value_type
bool operator!=(const VdfIndexedDataIterator &rhs) const
pointer operator->() const
VdfIndexedDataIterator operator++(int)
GLenum void ** pointer
Definition: glcorearb.h:810
typename BaseIterator::difference_type difference_type
VdfIndexedDataIterator & operator++()
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
typename std::vector< IteratedType >::const_iterator BaseIterator
reference operator*() const
GLboolean r
Definition: glcorearb.h:1222
that also have some descendant prim *whose name begins with which in turn has a child named baz where *the predicate and *a name There is also one special expression reference
VdfIndexedDataIterator()=default