MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / Iterator

Class Iterator

common/ast/navigable_ast_internal.h:47–102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45
46 public:
47 class Iterator {
48 public:
49 using difference_type = ptrdiff_t;
50 using value_type = decltype(RangeTraits::Adapt(*PtrType()));
51 using iterator_category = std::bidirectional_iterator_tag;
52
53 Iterator() : ptr_(nullptr), span_() {}
54 Iterator(SpanType span, size_t i) : ptr_(span.data() + i), span_(span) {}
55
56 value_type operator*() const {
57 ABSL_DCHECK(ptr_ != nullptr);
58 ABSL_DCHECK(span_.data() != nullptr);
59 ABSL_DCHECK_GE(ptr_, span_.data());
60 ABSL_DCHECK_LT(ptr_, span_.data() + span_.size());
61 return RangeTraits::Adapt(*ptr_);
62 }
63
64 template <int... Barrier, typename T = value_type>
65 std::enable_if_t<std::is_lvalue_reference<T>::value,
66 std::add_pointer_t<std::remove_reference_t<T>>>
67 operator->() const {
68 return &operator*();
69 }
70
71 Iterator& operator++() {
72 ++ptr_;
73 return *this;
74 }
75
76 Iterator operator++(int) {
77 Iterator tmp = *this;
78 ++ptr_;
79 return tmp;
80 }
81
82 Iterator& operator--() {
83 --ptr_;
84 return *this;
85 }
86
87 Iterator operator--(int) {
88 Iterator tmp = *this;
89 --ptr_;
90 return tmp;
91 }
92
93 bool operator==(const Iterator& other) const {
94 return ptr_ == other.ptr_ && span_ == other.span_;
95 }
96
97 bool operator!=(const Iterator& other) const { return !(*this == other); }
98
99 private:
100 PtrType ptr_;
101 SpanType span_;
102 };
103
104 explicit NavigableAstRange(SpanType span) : span_(span) {}

Callers 2

beginMethod · 0.85
endMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected