19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1994
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Hewlett-Packard Company
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996-1998
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers.
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *   You should not attempt to use it directly.
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ITERATOR_OLD_H
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_ITERATOR_OLD_H
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ITERATOR_BASE_H
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <stl/_iterator_base.h>
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifdef _STLP_USE_OLD_HP_ITERATOR_QUERIES
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container>
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline output_iterator_tag _STLP_CALL
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const back_insert_iterator<_Container>&) { return output_iterator_tag(); }
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container>
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline output_iterator_tag _STLP_CALL
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const front_insert_iterator<_Container>&) { return output_iterator_tag(); }
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container>
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline output_iterator_tag _STLP_CALL
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const insert_iterator<_Container>&) { return output_iterator_tag(); }
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator, class _Tp,
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_DFL_TMPL_PARAM(_Reference, _Tp& ),
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_MSVC50_COMPATIBILITY)
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define __Reference _Reference, class _Pointer
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define Reference__ _Reference, _Pointer
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_DFL_TMPL_PARAM(_Pointer, _Tp*),
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define __Reference _Reference
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define Reference__ _Reference
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_DFL_TYPE_PARAM(_Distance, ptrdiff_t)>
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass reverse_bidirectional_iterator {
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                         Reference__, _Distance> _Self;
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //  friend inline bool operator== _STLP_NULL_TMPL_ARGS (const _Self& x, const _Self& y);
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _BidirectionalIterator current;
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef bidirectional_iterator_tag iterator_category;
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Tp                        value_type;
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Distance                  difference_type;
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_MSVC50_COMPATIBILITY)
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Pointer                   pointer;
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Tp*                       pointer;
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Reference                 reference;
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_bidirectional_iterator() {}
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit reverse_bidirectional_iterator(_BidirectionalIterator __x)
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : current(__x) {}
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _BidirectionalIterator base() const { return current; }
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Reference operator*() const {
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _BidirectionalIterator __tmp = current;
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *(--__tmp);
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_DEFINE_ARROW_OPERATOR
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator++() {
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    --current;
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self operator++(int) {
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Self __tmp = *this;
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    --current;
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __tmp;
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator--() {
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++current;
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self operator--(int) {
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Self __tmp = *this;
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++current;
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __tmp;
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifdef _STLP_USE_OLD_HP_ITERATOR_QUERIES
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator, class _Tp, class __Reference,
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class _Distance>
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bidirectional_iterator_tag _STLP_CALL
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, Reference__, _Distance>&)
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return bidirectional_iterator_tag(); }
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator, class _Tp, class __Reference,
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  class _Distance>
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* _STLP_CALL
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvalue_type(const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, Reference__, _Distance>&)
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (_Tp*) 0; }
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator, class _Tp, class __Reference,
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class _Distance>
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance* _STLP_CALL
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdistance_type(const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, Reference__, _Distance>&)
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (_Distance*) 0; }
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator, class _Tp, class __Reference,
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class _Distance>
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool  _STLP_CALL operator==(
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                               Reference__, _Distance>& __x,
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                               Reference__, _Distance>& __y)
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __x.base() == __y.base(); }
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BiIter, class _Tp, class __Reference, class _Distance>
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool  _STLP_CALL operator!=(
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const reverse_bidirectional_iterator<_BiIter, _Tp, Reference__, _Distance>& __x,
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const reverse_bidirectional_iterator<_BiIter, _Tp, Reference__, _Distance>& __y)
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return !(__x == __y); }
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined ( _STLP_CLASS_PARTIAL_SPECIALIZATION )
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This is the old version of reverse_iterator, as found in the original
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//  HP STL.  It does not use partial specialization.
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _RandomAccessIterator, class _Tp,
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_DFL_TMPL_PARAM(_Reference,_Tp&),
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_MSVC50_COMPATIBILITY)
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_DFL_TMPL_PARAM(_Pointer, _Tp*),
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_DFL_TYPE_PARAM(_Distance,ptrdiff_t)>
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass reverse_iterator {
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance> _Self;
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _RandomAccessIterator __current;
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef random_access_iterator_tag iterator_category;
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Tp                        value_type;
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Distance                  difference_type;
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_MSVC50_COMPATIBILITY)
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Pointer                   pointer;
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Tp*                       pointer;
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Reference                 reference;
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator() {}
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator(const _Self& __x) : __current(__x.base()) {}
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit reverse_iterator(_RandomAccessIterator __x) : __current(__x) {}
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator=(const _Self& __x) {__current = __x.base(); return *this; }
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _RandomAccessIterator base() const { return __current; }
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Reference operator*() const { return *(__current - (difference_type)1); }
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_DEFINE_ARROW_OPERATOR
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator++() {
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    --__current;
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self operator++(int) {
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Self __tmp = *this;
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    --__current;
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __tmp;
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator--() {
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__current;
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self operator--(int) {
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Self __tmp = *this;
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__current;
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __tmp;
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self operator+(_Distance __n) const {
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _Self(__current - __n);
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator+=(_Distance __n) {
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __current -= __n;
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self operator-(_Distance __n) const {
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _Self(__current + __n);
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator-=(_Distance __n) {
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __current += __n;
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Reference operator[](_Distance __n) const { return *(*this + __n); }
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  ifdef _STLP_USE_OLD_HP_ITERATOR_QUERIES
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline random_access_iterator_tag _STLP_CALL
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance>&)
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return random_access_iterator_tag(); }
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  class __Reference, class _Distance>
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp*  _STLP_CALL value_type(const reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance>&)
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (_Tp*) 0; }
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance*  _STLP_CALL
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdistance_type(const reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance>&)
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (_Distance*) 0; }
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool  _STLP_CALL
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator==(const reverse_iterator<_RandomAccessIterator, _Tp,
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __x,
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const reverse_iterator<_RandomAccessIterator, _Tp,
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __y)
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __x.base() == __y.base();
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<(const reverse_iterator<_RandomAccessIterator, _Tp,
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                 Reference__, _Distance>& __x,
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          const reverse_iterator<_RandomAccessIterator, _Tp,
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                 Reference__, _Distance>& __y)
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __y.base() < __x.base();
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator!=(const reverse_iterator<_RandomAccessIterator, _Tp,
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __x,
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const reverse_iterator<_RandomAccessIterator, _Tp,
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __y) {
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return !(__x == __y);
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>(const reverse_iterator<_RandomAccessIterator, _Tp,
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                 Reference__, _Distance>& __x,
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          const reverse_iterator<_RandomAccessIterator, _Tp,
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                 Reference__, _Distance>& __y) {
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __y < __x;
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<=(const reverse_iterator<_RandomAccessIterator, _Tp,
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __x,
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const reverse_iterator<_RandomAccessIterator, _Tp,
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __y) {
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return !(__y < __x);
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>=(const reverse_iterator<_RandomAccessIterator, _Tp,
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __x,
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const reverse_iterator<_RandomAccessIterator, _Tp,
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  Reference__, _Distance>& __y) {
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return !(__x < __y);
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif /* _STLP_USE_SEPARATE_RELOPS_NAMESPACE */
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance  _STLP_CALL
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator-(const reverse_iterator<_RandomAccessIterator, _Tp,
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                 Reference__, _Distance>& __x,
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          const reverse_iterator<_RandomAccessIterator, _Tp,
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                 Reference__, _Distance>& __y)
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __y.base() - __x.base();
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Tp,
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          class __Reference, class _Distance>
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline reverse_iterator<_RandomAccessIterator, _Tp,
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                        Reference__, _Distance>  _STLP_CALL
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator+(_Distance __n,
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          const reverse_iterator<_RandomAccessIterator, _Tp,
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                 Reference__, _Distance>& __x)
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return reverse_iterator<_RandomAccessIterator, _Tp,
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                          Reference__, _Distance>(__x.base() - __n);
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* ! defined ( _STLP_CLASS_PARTIAL_SPECIALIZATION ) */
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_ITERATOR_H */
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
335