InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
K2Iterator.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: Mat Marcus
6 //
7 // $Author$
8 //
9 // $DateTime$
10 //
11 // $Revision$
12 //
13 // $Change$
14 //
15 // Copyright 1997-2010 Adobe Systems Incorporated. All rights reserved.
16 //
17 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance
18 // with the terms of the Adobe license agreement accompanying it. If you have received
19 // this file from a source other than Adobe, then your use, modification, or
20 // distribution of it requires the prior written permission of Adobe.
21 //
22 //========================================================================================
23 
24 #ifndef __K2Iterator__
25 #define __K2Iterator__
26 
27 #ifdef WINDOWS
28 #endif
29 
30 #include <iterator>
31 
38 template <class Iterator, class T, class Distance = std::ptrdiff_t, class Pointer = T*, class Reference = T&>
40 {
41 public:
42  typedef Iterator iterator_type;
43  typedef typename std::iterator_traits<Iterator>::iterator_category iterator_category;
44  typedef T value_type;
45  typedef Pointer pointer;
46  typedef Reference reference;
47  typedef Distance difference_type;
48 
50  explicit K2Reverse_iterator(Iterator x);
51  Iterator base() const; // explicit
52  reference operator*() const;
53  pointer operator->() const;
54  K2Reverse_iterator& operator++();
55  K2Reverse_iterator operator++(int);
56  K2Reverse_iterator& operator--();
57  K2Reverse_iterator operator--(int);
58  K2Reverse_iterator operator+ (difference_type n) const;
59  K2Reverse_iterator& operator+=(difference_type n);
60  K2Reverse_iterator operator- (difference_type n) const;
61  K2Reverse_iterator& operator-=(difference_type n);
62  reference operator[](difference_type n) const;
63 
64 protected:
65  Iterator fCurrent;
66 };
67 
71 template <class Iterator, class T, class Distance, class Pointer, class Reference>
72 inline
74 {
75 }
76 
77 template <class Iterator, class T, class Distance, class Pointer, class Reference>
78 inline
80  : fCurrent(x)
81 {
82 }
83 
84 
85 template <class Iterator, class T, class Distance, class Pointer, class Reference>
86 inline
87 Iterator
89 {
90  return fCurrent;
91 }
92 
93 template <class Iterator, class T, class Distance, class Pointer, class Reference>
94 inline
95 typename K2Reverse_iterator<Iterator, T, Distance, Pointer, Reference>::reference
97 {
98  Iterator tmp = fCurrent;
99  return *--tmp;
100 }
101 
102 template <class Iterator, class T, class Distance, class Pointer, class Reference>
103 inline
104 typename K2Reverse_iterator<Iterator, T, Distance, Pointer, Reference>::pointer
106 {
107  return &(**this);
108 }
109 
110 template <class Iterator, class T, class Distance, class Pointer, class Reference>
111 inline
114 {
115  --fCurrent;
116  return *this;
117 }
118 
119 template <class Iterator, class T, class Distance, class Pointer, class Reference>
120 inline
123 {
124  K2Reverse_iterator tmp = *this;
125  --fCurrent;
126  return tmp;
127 }
128 
129 template <class Iterator, class T, class Distance, class Pointer, class Reference>
130 inline
133 {
134  ++fCurrent;
135  return *this;
136 }
137 
138 template <class Iterator, class T, class Distance, class Pointer, class Reference>
139 inline
142 {
143  K2Reverse_iterator tmp = *this;
144  ++fCurrent;
145  return tmp;
146 }
147 
148 template <class Iterator, class T, class Distance, class Pointer, class Reference>
149 inline
152 {
153  return K2Reverse_iterator(fCurrent - n);
154 }
155 
156 template <class Iterator, class T, class Distance, class Pointer, class Reference>
157 inline
160 {
161  return K2Reverse_iterator(fCurrent + n);
162 }
163 
164 template <class Iterator, class T, class Distance, class Pointer, class Reference>
165 inline
168 {
169  fCurrent -= n;
170  return *this;
171 }
172 
173 template <class Iterator, class T, class Distance, class Pointer, class Reference>
174 inline
177 {
178  fCurrent += n;
179  return *this;
180 }
181 
182 template <class Iterator, class T, class Distance, class Pointer, class Reference>
183 inline
184 typename K2Reverse_iterator<Iterator, T, Distance, Pointer, Reference>::reference
186 {
187  return fCurrent[-n-1];
188 }
189 
190 template <class Iterator, class T, class Distance, class Pointer, class Reference>
191 inline
192 bool16
195 {
196  return static_cast<bool16>(lhs.base() == rhs.base());
197 }
198 
199 template <class Iterator, class T, class Distance, class Pointer, class Reference>
200 inline
201 bool16
202 operator< (const K2Reverse_iterator<Iterator, T, Distance, Pointer, Reference>& lhs,
204 {
205  return static_cast<bool16>(lhs.base() < rhs.base());
206 }
207 
208 template <class Iterator, class T, class Distance, class Pointer, class Reference>
209 inline
210 bool16
213 {
214  return static_cast<bool16>(lhs.base() != rhs.base());
215 }
216 
217 template <class Iterator, class T, class Distance, class Pointer, class Reference>
218 inline
219 bool16
222 {
223  return static_cast<bool16>(lhs.base() > rhs.base());
224 }
225 
226 template <class Iterator, class T, class Distance, class Pointer, class Reference>
227 inline
228 bool16
231 {
232  return static_cast<bool16>(lhs.base() >= rhs.base());
233 }
234 
235 template <class Iterator, class T, class Distance, class Pointer, class Reference>
236 inline
237 bool16
238 operator<=(const K2Reverse_iterator<Iterator, T, Distance, Pointer, Reference>& lhs,
240 {
241  return static_cast<bool16>(lhs.base() <= rhs.base());
242 }
243 
244 template <class Iterator, class T, class Distance, class Pointer, class Reference>
245 inline
246 typename K2Reverse_iterator<Iterator, T, Distance, Pointer, Reference>::difference_type
249 {
250  return rhs.base() - lhs.base();
251 }
252 
253 template <class Iterator, class T, class Distance, class Pointer, class Reference>
255 operator+(typename K2Reverse_iterator<Iterator, T, Distance, Pointer, Reference>::difference_type n,
257 {
259 }
260 
261 
262 
263 #endif //__K2Iterator__