13 #ifndef EASTL_INTERNAL_GENERIC_ITERATOR_H
14 #define EASTL_INTERNAL_GENERIC_ITERATOR_H
17 #include <EABase/eabase.h>
18 #if defined(EA_PRAGMA_ONCE_SUPPORTED)
22 #include <EASTL/internal/config.h>
23 #include <EASTL/iterator.h>
24 #include <EASTL/type_traits.h>
28 EA_DISABLE_VC_WARNING(4619 4217);
46 template <
typename Iterator,
typename Container =
void>
53 typedef typename eastl::iterator_traits<Iterator>::iterator_category iterator_category;
54 typedef typename eastl::iterator_traits<Iterator>::value_type value_type;
55 typedef typename eastl::iterator_traits<Iterator>::difference_type difference_type;
56 typedef typename eastl::iterator_traits<Iterator>::reference reference;
57 typedef typename eastl::iterator_traits<Iterator>::pointer pointer;
58 typedef Iterator iterator_type;
59 typedef iterator_type wrapped_iterator_type;
60 typedef Container container_type;
64 : mIterator(iterator_type()) { }
69 this_type& operator=(
const iterator_type& x)
70 { mIterator = x;
return *
this; }
72 template <
typename Iterator2>
74 : mIterator(x.base()) { }
76 reference operator*()
const
77 {
return *mIterator; }
79 pointer operator->()
const
83 { ++mIterator;
return *
this; }
89 { --mIterator;
return *
this; }
94 reference operator[](
const difference_type& n)
const
95 {
return mIterator[n]; }
97 this_type& operator+=(
const difference_type& n)
98 { mIterator += n;
return *
this; }
100 this_type operator+(
const difference_type& n)
const
103 this_type& operator-=(
const difference_type& n)
104 { mIterator -= n;
return *
this; }
106 this_type operator-(
const difference_type& n)
const
109 const iterator_type& base()
const
110 {
return mIterator; }
115 template <
typename IteratorL,
typename IteratorR,
typename Container>
117 {
return lhs.base() == rhs.base(); }
119 template <
typename Iterator,
typename Container>
120 inline bool operator==(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
121 {
return lhs.base() == rhs.base(); }
123 template <
typename IteratorL,
typename IteratorR,
typename Container>
124 inline bool operator!=(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
125 {
return lhs.base() != rhs.base(); }
127 template <
typename Iterator,
typename Container>
128 inline bool operator!=(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
129 {
return lhs.base() != rhs.base(); }
131 template <
typename IteratorL,
typename IteratorR,
typename Container>
132 inline bool operator<(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
133 {
return lhs.base() < rhs.base(); }
135 template <
typename Iterator,
typename Container>
136 inline bool operator<(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
137 {
return lhs.base() < rhs.base(); }
139 template <
typename IteratorL,
typename IteratorR,
typename Container>
140 inline bool operator>(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
141 {
return lhs.base() > rhs.base(); }
143 template <
typename Iterator,
typename Container>
144 inline bool operator>(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
145 {
return lhs.base() > rhs.base(); }
147 template <
typename IteratorL,
typename IteratorR,
typename Container>
148 inline bool operator<=(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
149 {
return lhs.base() <= rhs.base(); }
151 template <
typename Iterator,
typename Container>
152 inline bool operator<=(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
153 {
return lhs.base() <= rhs.base(); }
155 template <
typename IteratorL,
typename IteratorR,
typename Container>
156 inline bool operator>=(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
157 {
return lhs.base() >= rhs.base(); }
159 template <
typename Iterator,
typename Container>
160 inline bool operator>=(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
161 {
return lhs.base() >= rhs.base(); }
163 template <
typename IteratorL,
typename IteratorR,
typename Container>
164 inline typename generic_iterator<IteratorL, Container>::difference_type
165 operator-(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
166 {
return lhs.base() - rhs.base(); }
168 template <
typename Iterator,
typename Container>
169 inline generic_iterator<Iterator, Container>
170 operator+(
typename generic_iterator<Iterator, Container>::difference_type n,
const generic_iterator<Iterator, Container>& x)
171 {
return generic_iterator<Iterator, Container>(x.base() + n); }
181 template <
typename Iterator>
184 template <
typename Iterator,
typename Container>
197 template <
typename Iterator>
205 EA_RESTORE_VC_WARNING();
Definition: generic_iterator.h:48
EA Standard Template Library.
Definition: algorithm.h:288
eastl::is_iterator_wrapper_helper< Iterator, eastl::is_generic_iterator< Iterator >::value >::iterator_type unwrap_generic_iterator(Iterator it)
Definition: generic_iterator.h:198
Definition: type_traits.h:263
Definition: generic_iterator.h:182
Definition: iterator.h:182