summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/iterator.h5
1 files changed, 0 insertions, 5 deletions
diff --git a/include/opkele/iterator.h b/include/opkele/iterator.h
index 94da7e4..9e5b196 100644
--- a/include/opkele/iterator.h
+++ b/include/opkele/iterator.h
@@ -138,53 +138,48 @@ namespace opkele {
138 basic_filterator(const IT& _bi,const IT& _ei) 138 basic_filterator(const IT& _bi,const IT& _ei)
139 : it(_bi), ei(_ei) { empty = (it==ei); } 139 : it(_bi), ei(_ei) { empty = (it==ei); }
140 basic_filterator(const basic_filterator<IT>& x) 140 basic_filterator(const basic_filterator<IT>& x)
141 : it(x.it), ei(x.ei), empty(x.empty) { } 141 : it(x.it), ei(x.ei), empty(x.empty) { }
142 virtual ~basic_filterator() { } 142 virtual ~basic_filterator() { }
143 143
144 bool operator==(const basic_filterator<IT>& x) const { 144 bool operator==(const basic_filterator<IT>& x) const {
145 return empty?x.empty:(it==x.it); } 145 return empty?x.empty:(it==x.it); }
146 bool operator!=(const basic_filterator<IT>& x) const { 146 bool operator!=(const basic_filterator<IT>& x) const {
147 return empty!=x.empty || it!=x.it; } 147 return empty!=x.empty || it!=x.it; }
148 148
149 typename IT::reference operator*() const { 149 typename IT::reference operator*() const {
150 assert(!empty); 150 assert(!empty);
151 return *it; } 151 return *it; }
152 typename IT::pointer operator->() const { 152 typename IT::pointer operator->() const {
153 assert(!empty); 153 assert(!empty);
154 return it.operator->(); } 154 return it.operator->(); }
155 155
156 basic_filterator<IT>& operator++() { 156 basic_filterator<IT>& operator++() {
157 bool found = false; 157 bool found = false;
158 for(++it;!(it==ei || (found=is_interesting()));++it) ; 158 for(++it;!(it==ei || (found=is_interesting()));++it) ;
159 if(!found) empty=true; 159 if(!found) empty=true;
160 return *this; 160 return *this;
161 } 161 }
162 basic_filterator<IT> operator++(int) {
163 basic_filterator<IT> rv(*this);
164 ++(*this);
165 return rv;
166 }
167 162
168 void prepare() { 163 void prepare() {
169 bool found = false; 164 bool found = false;
170 for(;!(it==ei || (found=is_interesting()));++it) ; 165 for(;!(it==ei || (found=is_interesting()));++it) ;
171 if(!found) empty = true; 166 if(!found) empty = true;
172 } 167 }
173 virtual bool is_interesting() const = 0; 168 virtual bool is_interesting() const = 0;
174 }; 169 };
175 170
176 template<typename IT,typename T=typename IT::value_type::first_type,typename TR=T&,typename TP=T*> 171 template<typename IT,typename T=typename IT::value_type::first_type,typename TR=T&,typename TP=T*>
177 class map_keys_iterator : public iterator< 172 class map_keys_iterator : public iterator<
178 typename IT::iterator_category, 173 typename IT::iterator_category,
179 T,void,TP,TR> { 174 T,void,TP,TR> {
180 public: 175 public:
181 typedef map_keys_iterator<IT,T,TR,TP> self_type; 176 typedef map_keys_iterator<IT,T,TR,TP> self_type;
182 IT it; 177 IT it;
183 IT ei; 178 IT ei;
184 bool empty; 179 bool empty;
185 180
186 map_keys_iterator() : empty(true) { } 181 map_keys_iterator() : empty(true) { }
187 map_keys_iterator(const IT& _bi, 182 map_keys_iterator(const IT& _bi,
188 const IT& _ei) 183 const IT& _ei)
189 : it(_bi), ei(_ei) { empty = (it==ei); } 184 : it(_bi), ei(_ei) { empty = (it==ei); }
190 map_keys_iterator(const self_type& x) 185 map_keys_iterator(const self_type& x)