9 #ifndef WIBBLE_ITERATOR_H
10 #define WIBBLE_ITERATOR_H
16 template<
typename T,
typename I >
21 template<
typename T >
26 template<
typename T >
31 template<
typename T >
38 template<
typename T >
45 template<
typename T,
typename W >
56 template<
typename T,
typename Self >
59 Self &
self() {
return *
static_cast< const Self *
>( this ); }
60 const Self &
self()
const {
return *
static_cast< const Self *
>( this ); }
72 Self
next()
const { Self n(
self() ); n.advance();
return n; }
83 template<
typename T,
typename I >
88 template<
typename T,
typename I >
93 template<
typename T >
104 T
current()
const {
return this->implInterface()->current(); }
105 virtual void advance() { this->implInterface()->advance(); }
110 template<
typename It >
113 typedef typename std::iterator_traits< It >::value_type
Value;
122 template<
typename I >