15 #ifndef WIBBLE_RANGE_H
16 #define WIBBLE_RANGE_H
20 template<
typename _ >
struct Range;
21 template<
typename _ >
struct Consumer;
25 template<
typename R >
27 typedef typename R::ElementType
T;
49 typename R::ElementType
current()
const {
return *(*this); }
60 template<
typename T,
typename Self >
65 const Self &
self()
const {
return *
static_cast< const Self *
>( this ); }
75 Self
tail()
const { Self e( this->
self() ); e.removeFirst();
return e; }
92 template<
typename T >
94 virtual T
head()
const = 0;
100 template<
typename T,
typename W >
103 typedef typename W::RangeImplementation
Wrapped;
152 template<
typename T >
153 struct Range : Amorph< Range< T >, RangeInterface< T > >,
154 RangeMixin< T, Range< T > >
158 template<
typename C >
188 template<
typename It >
190 typename std::iterator_traits< It >::value_type,
191 IteratorRange< It > >
193 typedef typename std::iterator_traits< It >::value_type
Value;
221 template<
typename T,
typename Casted >
245 template<
typename T,
typename C >
251 template<
typename T,
typename C >
257 template<
typename T >
template<
typename C >
259 return castedRange< C >( *this );
263 template<
typename In >
268 template<
typename C >
270 return range( c.begin(), c.end() );
273 template<
typename T >
326 template<
typename R >
331 template<
typename R,
typename Pred >
333 FilteredRange< R, Pred > >
376 template<
typename R,
typename Pred >
382 template<
typename T >
423 template<
typename R >
428 template<
typename Transform >
430 TransformedRange< Transform > >
432 typedef typename Transform::argument_type
Source;
433 typedef typename Transform::result_type
Result;
450 template<
typename Trans >
456 template<
typename T,
typename _Advance,
typename _End >
493 template<
typename T,
typename A,
typename E >