wibble 1.1
iterator.h
Go to the documentation of this file.
1
6#include <wibble/amorph.h>
7#include <wibble/mixin.h>
8
9#ifndef WIBBLE_ITERATOR_H
10#define WIBBLE_ITERATOR_H
11
12namespace wibble {
13
14typedef bool SortabilityTag;
15
16template< typename T, typename I >
20
21template< typename T >
22struct IteratorTraits< T, typename std::set< T >::iterator > {
24};
25
26template< typename T >
29};
30
31template< typename T >
33 virtual T current() const = 0;
34 virtual void advance() = 0;
35 virtual ~IteratorInterface() {}
36};
37
38template< typename T >
40 IteratorProxy( T _x ) : x( _x ) {}
41 T x;
42 const T *operator->() const { return &x; }
43};
44
45template< typename T, typename W >
46struct IteratorMorph : Morph< IteratorMorph< T, W >, W, IteratorInterface< T > >
47{
48 typedef W Wrapped;
52 virtual void advance() { this->wrapped().advance(); }
53 virtual T current() const { return this->wrapped().current(); }
54};
55
56template< typename T, typename Self >
58{
59 Self &self() { return *static_cast< const Self * >( this ); }
60 const Self &self() const { return *static_cast< const Self * >( this ); }
61 typedef T ElementType;
62
63 typedef std::forward_iterator_tag iterator_category;
64 typedef T value_type;
66 typedef T *pointer;
67 typedef T &reference;
68 typedef const T &const_reference;
69
71 return IteratorProxy< T >(self().current()); }
72 Self next() const { Self n( self() ); n.advance(); return n; }
73 T operator*() const { return self().current(); }
74
75 Self &operator++() { self().advance(); return self(); }
77 Self tmp = self();
78 self().advance();
79 return tmp;
80 }
81};
82
83template< typename T, typename I >
85 return false;
86}
87
88template< typename T, typename I >
90 return true;
91}
92
93template< typename T >
94struct Iterator : Amorph< Iterator< T >, IteratorInterface< T >, 0 >,
95 IteratorMixin< T, Iterator< T > >
96{
98 typedef T ElementType;
99
102 bool operator<=( const Iterator &i ) const { return leq( i ); }
103
104 T current() const { return this->implInterface()->current(); }
105 virtual void advance() { this->implInterface()->advance(); }
106
107 template< typename C > operator Iterator< C >();
108};
109
110template< typename It >
111struct StlIterator : IteratorMixin< typename It::value_type, StlIterator< It > >
112{
113 typedef typename std::iterator_traits< It >::value_type Value;
114 StlIterator( It i ) : m_iterator( i ) {}
115 virtual void advance() { ++m_iterator; }
116 virtual Value current() const { return *m_iterator; }
117 bool operator==( const StlIterator< It > &o ) { return m_iterator == o.m_iterator; }
118protected:
120};
121
122template< typename I >
126
127}
128
129#endif
-*- C++ -*-
Definition amorph.h:17
bool SortabilityTag
Definition iterator.h:14
IteratorTraits< T, I >::Unsorted isSortedT(I, I)
Definition iterator.h:84
Iterator< typename I::value_type > iterator(I i)
Definition iterator.h:123
Definition amorph.h:272
bool leq(const Iterator< T > &i) const
Definition amorph.h:303
Definition iterator.h:32
virtual T current() const =0
virtual void advance()=0
virtual ~IteratorInterface()
Definition iterator.h:35
Definition iterator.h:58
T operator*() const
Definition iterator.h:73
std::forward_iterator_tag iterator_category
Definition iterator.h:63
const T & const_reference
Definition iterator.h:68
T value_type
Definition iterator.h:64
IteratorProxy< T > operator->() const
Definition iterator.h:70
const Self & self() const
Definition iterator.h:60
Self & self()
Definition iterator.h:59
Self & operator++()
Definition iterator.h:75
Self operator++(int)
Definition iterator.h:76
T * pointer
Definition iterator.h:66
ptrdiff_t difference_type
Definition iterator.h:65
T & reference
Definition iterator.h:67
T ElementType
Definition iterator.h:61
Self next() const
Definition iterator.h:72
Definition iterator.h:47
IteratorMorph(const Wrapped &w)
Definition iterator.h:50
W Wrapped
Definition iterator.h:48
IteratorMorph()
Definition iterator.h:49
virtual void advance()
Definition iterator.h:52
virtual T current() const
Definition iterator.h:53
Definition iterator.h:39
IteratorProxy(T _x)
Definition iterator.h:40
const T * operator->() const
Definition iterator.h:42
T x
Definition iterator.h:41
Definition iterator.h:17
SortabilityTag Unsorted
Definition iterator.h:18
Definition iterator.h:96
T current() const
Definition iterator.h:104
bool operator<=(const Iterator &i) const
Definition iterator.h:102
virtual void advance()
Definition iterator.h:105
Amorph< Iterator< T >, IteratorInterface< T >, 0 > Super
Definition iterator.h:97
T ElementType
Definition iterator.h:98
Iterator()
Definition iterator.h:101
Iterator(const IteratorInterface< T > &i)
Definition iterator.h:100
Definition amorph.h:144
const Wrapped & wrapped() const
Definition amorph.h:181
Definition amorph.h:30
Definition iterator.h:112
StlIterator(It i)
Definition iterator.h:114
std::iterator_traits< It >::value_type Value
Definition iterator.h:113
It m_iterator
Definition iterator.h:119
virtual void advance()
Definition iterator.h:115
bool operator==(const StlIterator< It > &o)
Definition iterator.h:117
virtual Value current() const
Definition iterator.h:116
Definition mixin.h:13