| 159 | }; |
| 160 | |
| 161 | class const_iterator { |
| 162 | public: |
| 163 | typedef T value_type; |
| 164 | typedef const T& reference; |
| 165 | typedef const T* pointer; |
| 166 | typedef fl::size difference_type; |
| 167 | typedef fl::random_access_iterator_tag iterator_category; |
| 168 | |
| 169 | private: |
| 170 | const deque* mDeque; |
| 171 | fl::size mIndex; |
| 172 | |
| 173 | friend class deque; |
| 174 | |
| 175 | public: |
| 176 | const_iterator(const deque* dq, fl::size index) : mDeque(dq), mIndex(index) {} |
| 177 | |
| 178 | // Implicit conversion from iterator to const_iterator |
| 179 | const_iterator(const iterator& it) : mDeque(it.mDeque), mIndex(it.mIndex) {} |
| 180 | |
| 181 | const T& operator*() const { |
| 182 | return (*mDeque)[mIndex]; |
| 183 | } |
| 184 | |
| 185 | const T* operator->() const { |
| 186 | return &(*mDeque)[mIndex]; |
| 187 | } |
| 188 | |
| 189 | const_iterator& operator++() { |
| 190 | ++mIndex; |
| 191 | return *this; |
| 192 | } |
| 193 | |
| 194 | const_iterator operator++(int) { |
| 195 | const_iterator temp = *this; |
| 196 | ++mIndex; |
| 197 | return temp; |
| 198 | } |
| 199 | |
| 200 | const_iterator& operator--() { |
| 201 | --mIndex; |
| 202 | return *this; |
| 203 | } |
| 204 | |
| 205 | const_iterator operator--(int) { |
| 206 | const_iterator temp = *this; |
| 207 | --mIndex; |
| 208 | return temp; |
| 209 | } |
| 210 | |
| 211 | const_iterator& operator+=(fl::size n) { |
| 212 | mIndex += n; |
| 213 | return *this; |
| 214 | } |
| 215 | |
| 216 | const_iterator operator+(fl::size n) const { |
| 217 | const_iterator temp = *this; |
| 218 | return temp += n; |