35 #ifndef VIGRA_ITERATORADAPTER_HXX
36 #define VIGRA_ITERATORADAPTER_HXX
146 template <
class Policy>
151 typedef typename Policy::BaseType BaseType;
152 typedef typename Policy::value_type value_type;
153 typedef typename Policy::difference_type difference_type;
154 typedef typename Policy::reference reference;
155 typedef typename Policy::index_reference index_reference;
156 typedef typename Policy::pointer pointer;
157 typedef typename Policy::iterator_category iterator_category;
171 Policy::initialize(adaptee_);
175 : adaptee_(o.adaptee_)
178 IteratorAdaptor & operator=(BaseType
const & o)
183 Policy::initialize(adaptee_);
188 IteratorAdaptor & operator=(IteratorAdaptor
const & o)
191 adaptee_ = o.adaptee_;
195 IteratorAdaptor & operator+=(difference_type d)
197 Policy::advance(adaptee_, d);
201 IteratorAdaptor operator+(difference_type d)
const
203 return IteratorAdaptor(*
this) += d;
206 IteratorAdaptor & operator-=(difference_type d)
208 Policy::advance(adaptee_, -d);
212 IteratorAdaptor operator-(difference_type d)
const
214 return IteratorAdaptor(*
this) -= d;
217 IteratorAdaptor & operator++()
219 Policy::increment(adaptee_);
223 IteratorAdaptor operator++(
int)
225 IteratorAdaptor res(*
this);
226 Policy::increment(adaptee_);
230 IteratorAdaptor & operator--()
232 Policy::decrement(adaptee_);
236 IteratorAdaptor operator--(
int)
238 IteratorAdaptor res(*
this);
239 Policy::decrement(adaptee_);
243 bool operator==(IteratorAdaptor
const & o)
const
245 return Policy::equal(adaptee_, o.adaptee_);
248 bool operator!=(IteratorAdaptor
const & o)
const
250 return !Policy::equal(adaptee_, o.adaptee_);
253 bool operator<(IteratorAdaptor
const & o)
const
255 return Policy::less(adaptee_, o.adaptee_);
258 bool operator<=(IteratorAdaptor
const & o)
const
260 return !Policy::less(o.adaptee_, adaptee_);
263 bool operator>(IteratorAdaptor
const & o)
const
265 return Policy::less(o.adaptee_, adaptee_);
268 bool operator>=(IteratorAdaptor
const & o)
const
270 return !Policy::less(adaptee_, o.adaptee_);
273 difference_type operator-(IteratorAdaptor
const & o)
const
275 return Policy::difference(adaptee_, o.adaptee_);
278 reference operator*()
const
280 return Policy::dereference(adaptee_);
283 index_reference operator[](difference_type d)
const
285 return Policy::dereference(adaptee_, d);
288 pointer operator->()
const
290 return &Policy::dereference(adaptee_);
305 namespace detail_iterator_facade{
IteratorAdaptor(BaseType const &o)
Definition: iteratoradapter.hxx:168
Quickly create 1-dimensional iterator adapters.
Definition: iteratoradapter.hxx:147