Go to the documentation of this file.
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 ); }
71 iterator
end()
const { Self e( this->
self() ); e.setToEmpty();
return iterator( e ); }
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 >
163 T
head()
const {
return this->implementation()->head(); }
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 >
void setToEmpty()
Definition: range.h:408
Iterator< typename I::value_type > iterator(I i)
Definition: iterator.h:123
UniqueRange< typename R::ElementType > uniqueRange(R r1)
Definition: range.h:424
Range< T > m_second
Definition: range.h:322
End m_endPred
Definition: range.h:489
bool operator<=(const UniqueRange &r) const
Definition: range.h:412
T head() const
Definition: range.h:403
IntersectionRange()
Definition: range.h:276
It m_current
Definition: range.h:211
Definition: iterator.h:57
Proxy operator->() const
Definition: range.h:45
R::ElementType T
Definition: range.h:27
void find() const
Definition: range.h:388
RangeIterator< Self > iterator
Definition: range.h:67
R m_range
Definition: range.h:56
const Pred & pred() const
Definition: range.h:369
Pred m_pred
Definition: range.h:372
T head() const
Definition: range.h:305
void removeFirst()
Definition: range.h:229
GeneratedRange< T, A, E > generatedRange(T t, A a, E e)
Definition: range.h:494
Self tail() const
Definition: range.h:75
IntersectionRange< typename R::ElementType > intersectionRange(R r1, R r2)
Definition: range.h:327
R m_range
Definition: range.h:370
Range(const C &i, typename IsType< int, typename C::RangeImplementation >::T fake=0)
Definition: range.h:159
bool m_end
Definition: range.h:490
ElementType head() const
Definition: range.h:352
bool operator<=(const GeneratedRange &r) const
Definition: range.h:480
_T T
Definition: cast.h:26
Self RangeImplementation
Definition: range.h:63
T m_current
Definition: range.h:487
FilteredRange(const R &r, Pred p)
Definition: range.h:337
R::ElementType current() const
Definition: range.h:49
RangeIterator(const R &r)
Definition: range.h:36
bool operator<=(const IteratorRange &r) const
Definition: range.h:202
_End End
Definition: range.h:460
void removeFirst()
Definition: range.h:346
iterator end() const
Definition: range.h:71
Definition: consumer.h:17
void removeFirst()
Definition: range.h:200
iterator begin() const
Definition: range.h:70
virtual T head() const =0
void find() const
Definition: range.h:340
RangeIterator & operator++()
Definition: range.h:50
std::forward_iterator_tag iterator_category
Definition: range.h:38
T head() const
Definition: range.h:226
RangeIterator operator++(int)
Definition: range.h:51
virtual void setToEmpty()
Definition: range.h:105
It m_end
Definition: range.h:211
Range< Casted > m_casted
Definition: range.h:240
R::ElementType operator*() const
Definition: range.h:48
FilteredRange< R, Pred > filteredRange(R r, Pred p)
Definition: range.h:377
virtual void removeFirst()=0
void setToEmpty()
Definition: range.h:235
T head() const
Definition: range.h:163
void output(Consumer< T > t) const
Definition: range.h:78
virtual void setToEmpty()=0
virtual void removeFirst()
Definition: range.h:106
bool empty() const
Definition: range.h:82
bool operator<=(const FilteredRange &f) const
Definition: range.h:361
UniqueRange()
Definition: range.h:385
void setToEmpty()
Definition: range.h:206
bool m_valid
Definition: range.h:373
IteratorRange()
Definition: range.h:195
const Wrapped & wrapped() const
Definition: amorph.h:181
const T * operator->() const
Definition: range.h:32
~RangeMixin()
Definition: range.h:86
T head() const
Definition: range.h:476
Range< T > m_range
Definition: range.h:419
std::iterator_traits< It >::value_type Value
Definition: range.h:193
ptrdiff_t difference_type
Definition: range.h:40
T head()
Definition: range.h:74
T & reference
Definition: range.h:42
void setToEmpty()
Definition: range.h:310
bool operator<=(const IntersectionRange &f) const
Definition: range.h:315
const typedef T & const_reference
Definition: range.h:43
void setToEmpty()
Definition: range.h:472
Value head() const
Definition: range.h:199
T x
Definition: range.h:31
Advance m_advance
Definition: range.h:488
bool m_valid
Definition: range.h:420
RangeIterator next() const
Definition: range.h:47
bool operator<=(const RangeIterator &r) const
Definition: range.h:52
void removeFirst()
Definition: range.h:164
void removeFirst()
Definition: range.h:468
Proxy(T _x)
Definition: range.h:30
void find() const
Definition: range.h:283
CastedRange()
Definition: range.h:224
bool m_valid
Definition: range.h:323
void removeFirst()
Definition: range.h:298
GeneratedRange()
Definition: range.h:462
RangeMorph(const Wrapped &w)
Definition: range.h:104
void setToEmpty()
Definition: range.h:357
GeneratedRange(const T &t, const Advance &a, const End &e)
Definition: range.h:463
IteratorMixin< T, Self > Base
Definition: range.h:66
virtual ~RangeInterface()
Definition: range.h:97
void removeFirst()
Definition: range.h:397
Range()
Definition: range.h:161
bool isEnd() const
Definition: range.h:478
W::RangeImplementation Wrapped
Definition: range.h:103
bool operator<=(const CastedRange &r) const
Definition: range.h:231
Range< T > upcastRange(C r)
Definition: range.h:252
IntersectionRange(Range< T > r1, Range< T > r2)
Definition: range.h:277
T ElementType
Definition: range.h:64
Range< T > castedRange(C r)
Definition: range.h:246
R::ElementType ElementType
Definition: range.h:335
UniqueRange(Range< T > r)
Definition: range.h:386
Range< typename In::value_type > range(In b, In e)
Definition: range.h:264
Amorph< Range< T >, RangeInterface< T > > Super
Definition: range.h:156
T value_type
Definition: range.h:39
Range< T > m_first
Definition: range.h:322
virtual T head() const
Definition: range.h:107
R::iterator m_current
Definition: range.h:371
void setToEmpty()
Definition: range.h:165
_Advance Advance
Definition: range.h:459
IteratorRange(It c, It e)
Definition: range.h:196
T * pointer
Definition: range.h:41
CastedRange(Range< Casted > r)
Definition: range.h:225
RangeIterator()
Definition: range.h:35
TransformedRange< Trans > transformedRange(Range< typename Trans::argument_type > r, Trans t)
Definition: range.h:451