Changeset 5ba653c for src/GenPoly/ScopedSet.h
- Timestamp:
- Apr 11, 2016, 4:41:22 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- df2be83
- Parents:
- 6f49cdf
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/ScopedSet.h
r6f49cdf r5ba653c 48 48 typedef typename scope_list::size_type size_type; 49 49 50 /// Checks if this iterator points to a valid item 51 bool is_valid() const { 52 return it != (*scopes)[i].end(); 53 } 54 55 /// Increments on invalid 56 iterator& next_valid() { 57 if ( ! is_valid() ) { ++(*this); } 58 return *this; 59 } 60 61 /// Decrements on invalid 62 iterator& prev_valid() { 63 if ( ! is_valid() ) { --(*this); } 64 return *this; 65 } 66 50 67 iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i) 51 68 : scopes(&_scopes), it(_it), i(_i) {} … … 65 82 --i; 66 83 it = (*scopes)[i].begin(); 67 return *this;68 }69 ++it;70 return *this;84 } else { 85 ++it; 86 } 87 return next_valid(); 71 88 } 72 89 iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; } … … 79 96 } 80 97 --it; 81 return *this;98 return prev_valid(); 82 99 } 83 100 iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; } … … 102 119 typedef typename scope_list::size_type size_type; 103 120 121 /// Checks if this iterator points to a valid item 122 bool is_valid() const { 123 return it != (*scopes)[i].end(); 124 } 125 126 /// Increments on invalid 127 const_iterator& next_valid() { 128 if ( ! is_valid() ) { ++(*this); } 129 return *this; 130 } 131 132 /// Decrements on invalid 133 const_iterator& prev_valid() { 134 if ( ! is_valid() ) { --(*this); } 135 return *this; 136 } 137 104 138 const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i) 105 139 : scopes(&_scopes), it(_it), i(_i) {} … … 124 158 --i; 125 159 it = (*scopes)[i].begin(); 126 return *this;127 }128 ++it;129 return *this;160 } else { 161 ++it; 162 } 163 return next_valid(); 130 164 } 131 165 const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; } … … 138 172 } 139 173 --it; 140 return *this;174 return prev_valid(); 141 175 } 142 176 const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; } … … 167 201 ScopedSet() { beginScope(); } 168 202 169 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }170 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }171 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }203 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 204 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 205 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 172 206 iterator end() { return iterator(scopes, scopes[0].end(), 0); } 173 207 const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); }
Note: See TracChangeset
for help on using the changeset viewer.