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