43 #ifndef EASTL_INTERNAL_GENERIC_ITERATOR_H 44 #define EASTL_INTERNAL_GENERIC_ITERATOR_H 47 #include <stk_util/util/config_eastl.h> 48 #include <stk_util/util/iterator_eastl.h> 49 #include <stk_util/util/type_traits_eastl.h> 53 #pragma warning(push) // VC++ generates a bogus warning that you cannot code away. 54 #pragma warning(disable: 4619) // There is no warning number 'number'. 55 #pragma warning(disable: 4217) // Member template functions cannot be used for copy-assignment or copy-construction. 74 template <
typename Iterator,
typename Container =
void>
81 typedef typename eastl::iterator_traits<Iterator>::iterator_category iterator_category;
82 typedef typename eastl::iterator_traits<Iterator>::value_type value_type;
83 typedef typename eastl::iterator_traits<Iterator>::difference_type difference_type;
84 typedef typename eastl::iterator_traits<Iterator>::reference reference;
85 typedef typename eastl::iterator_traits<Iterator>::pointer pointer;
86 typedef Iterator iterator_type;
87 typedef Container container_type;
91 : mIterator(iterator_type()) { }
96 this_type& operator=(
const iterator_type& x)
97 { mIterator = x;
return *
this; }
99 template <
typename Iterator2>
101 : mIterator(x.base()) { }
103 reference operator*()
const 104 {
return *mIterator; }
106 pointer operator->()
const 107 {
return mIterator; }
110 { ++mIterator;
return *
this; }
116 { --mIterator;
return *
this; }
121 reference operator[](
const difference_type& n)
const 122 {
return mIterator[n]; }
124 this_type& operator+=(
const difference_type& n)
125 { mIterator += n;
return *
this; }
127 this_type operator+(
const difference_type& n)
const 130 this_type& operator-=(
const difference_type& n)
131 { mIterator -= n;
return *
this; }
133 this_type operator-(
const difference_type& n)
const 136 const iterator_type& base()
const 137 {
return mIterator; }
145 template <
typename IteratorL,
typename IteratorR,
typename Container>
147 {
return lhs.base() == rhs.base(); }
149 template <
typename Iterator,
typename Container>
150 inline bool operator==(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
151 {
return lhs.base() == rhs.base(); }
153 template <
typename IteratorL,
typename IteratorR,
typename Container>
154 inline bool operator!=(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
155 {
return lhs.base() != rhs.base(); }
157 template <
typename Iterator,
typename Container>
158 inline bool operator!=(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
159 {
return lhs.base() != rhs.base(); }
161 template <
typename IteratorL,
typename IteratorR,
typename Container>
162 inline bool operator<(const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
163 {
return lhs.base() < rhs.base(); }
165 template <
typename Iterator,
typename Container>
166 inline bool operator<(const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
167 {
return lhs.base() < rhs.base(); }
169 template <
typename IteratorL,
typename IteratorR,
typename Container>
170 inline bool operator>(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
171 {
return lhs.base() > rhs.base(); }
173 template <
typename Iterator,
typename Container>
174 inline bool operator>(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
175 {
return lhs.base() > rhs.base(); }
177 template <
typename IteratorL,
typename IteratorR,
typename Container>
178 inline bool operator<=(const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
179 {
return lhs.base() <= rhs.base(); }
181 template <
typename Iterator,
typename Container>
182 inline bool operator<=(const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
183 {
return lhs.base() <= rhs.base(); }
185 template <
typename IteratorL,
typename IteratorR,
typename Container>
186 inline bool operator>=(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
187 {
return lhs.base() >= rhs.base(); }
189 template <
typename Iterator,
typename Container>
190 inline bool operator>=(
const generic_iterator<Iterator, Container>& lhs,
const generic_iterator<Iterator, Container>& rhs)
191 {
return lhs.base() >= rhs.base(); }
193 template <
typename IteratorL,
typename IteratorR,
typename Container>
194 inline typename generic_iterator<IteratorL, Container>::difference_type
195 operator-(
const generic_iterator<IteratorL, Container>& lhs,
const generic_iterator<IteratorR, Container>& rhs)
196 {
return lhs.base() - rhs.base(); }
198 template <
typename Iterator,
typename Container>
199 inline generic_iterator<Iterator, Container>
200 operator+(
typename generic_iterator<Iterator, Container>::difference_type n,
const generic_iterator<Iterator, Container>& x)
201 {
return generic_iterator<Iterator, Container>(x.base() + n); }
211 template <
typename Iterator>
214 template <
typename Iterator,
typename Container>
226 #endif // Header include guard
EA Standard Template Library.