Changeset 5ba653c for src/GenPoly/ScopedMap.h
- Timestamp:
- Apr 11, 2016, 4:41:22 PM (9 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/ScopedMap.h
r6f49cdf r5ba653c 51 51 typedef typename scope_list::size_type size_type; 52 52 53 /// Checks if this iterator points to a valid item 54 bool is_valid() const { 55 return it != (*scopes)[i].end(); 56 } 57 58 /// Increments on invalid 59 iterator& next_valid() { 60 if ( ! is_valid() ) { ++(*this); } 61 return *this; 62 } 63 64 /// Decrements on invalid 65 iterator& prev_valid() { 66 if ( ! is_valid() ) { --(*this); } 67 return *this; 68 } 69 53 70 iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i) 54 71 : scopes(&_scopes), it(_it), i(_i) {} … … 68 85 --i; 69 86 it = (*scopes)[i].begin(); 70 return *this;71 }72 ++it;73 return *this;87 } else { 88 ++it; 89 } 90 return next_valid(); 74 91 } 75 92 iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; } … … 82 99 } 83 100 --it; 84 return *this;101 return prev_valid(); 85 102 } 86 103 iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; } … … 105 122 typedef typename scope_list::size_type size_type; 106 123 124 /// Checks if this iterator points to a valid item 125 bool is_valid() const { 126 return it != (*scopes)[i].end(); 127 } 128 129 /// Increments on invalid 130 const_iterator& next_valid() { 131 if ( ! is_valid() ) { ++(*this); } 132 return *this; 133 } 134 135 /// Decrements on invalid 136 const_iterator& prev_valid() { 137 if ( ! is_valid() ) { --(*this); } 138 return *this; 139 } 140 107 141 const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i) 108 142 : scopes(&_scopes), it(_it), i(_i) {} … … 127 161 --i; 128 162 it = (*scopes)[i].begin(); 129 return *this;130 }131 ++it;132 return *this;163 } else { 164 ++it; 165 } 166 return next_valid(); 133 167 } 134 168 const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; } … … 141 175 } 142 176 --it; 143 return *this;177 return prev_valid(); 144 178 } 145 179 const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; } … … 171 205 ScopedMap() { beginScope(); } 172 206 173 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }174 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }175 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1) ; }207 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 208 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 209 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); } 176 210 iterator end() { return iterator(scopes, scopes[0].end(), 0); } 177 211 const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); }
Note: See TracChangeset
for help on using the changeset viewer.