epoc32/include/stdapis/stlportv5/stl/_iterator_old.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 epoc32/include/stdapis/stlport/stl/_iterator_old.h@2fe1408b6811
child 4 837f303aceeb
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
williamr@2
     1
/*
williamr@2
     2
 *
williamr@2
     3
 * Copyright (c) 1994
williamr@2
     4
 * Hewlett-Packard Company
williamr@2
     5
 *
williamr@2
     6
 * Copyright (c) 1996-1998
williamr@2
     7
 * Silicon Graphics Computer Systems, Inc.
williamr@2
     8
 *
williamr@2
     9
 * Copyright (c) 1997
williamr@2
    10
 * Moscow Center for SPARC Technology
williamr@2
    11
 *
williamr@2
    12
 * Copyright (c) 1999 
williamr@2
    13
 * Boris Fomitchev
williamr@2
    14
 *
williamr@2
    15
 * This material is provided "as is", with absolutely no warranty expressed
williamr@2
    16
 * or implied. Any use is at your own risk.
williamr@2
    17
 *
williamr@2
    18
 * Permission to use or copy this software for any purpose is hereby granted 
williamr@2
    19
 * without fee, provided the above notices are retained on all copies.
williamr@2
    20
 * Permission to modify the code and to distribute modified code is granted,
williamr@2
    21
 * provided the above notices are retained, and a notice that the code was
williamr@2
    22
 * modified is included with the above copyright notice.
williamr@2
    23
 *
williamr@2
    24
 */
williamr@2
    25
williamr@2
    26
/* NOTE: This is an internal header file, included by other STL headers.
williamr@2
    27
 *   You should not attempt to use it directly.
williamr@2
    28
 */
williamr@2
    29
williamr@2
    30
#ifndef _STLP_INTERNAL_ITERATOR_OLD_H
williamr@2
    31
#define _STLP_INTERNAL_ITERATOR_OLD_H
williamr@2
    32
williamr@2
    33
#ifndef _STLP_INTERNAL_ITERATOR_BASE_H
williamr@2
    34
# include <stl/_iterator_base.h>
williamr@2
    35
#endif
williamr@2
    36
williamr@2
    37
_STLP_BEGIN_NAMESPACE
williamr@2
    38
williamr@2
    39
# ifdef _STLP_USE_OLD_HP_ITERATOR_QUERIES
williamr@2
    40
williamr@2
    41
template <class _Container>
williamr@2
    42
inline output_iterator_tag _STLP_CALL
williamr@2
    43
iterator_category(const back_insert_iterator<_Container>&) { return output_iterator_tag(); }
williamr@2
    44
template <class _Container>
williamr@2
    45
inline output_iterator_tag _STLP_CALL
williamr@2
    46
iterator_category(const front_insert_iterator<_Container>&) { return output_iterator_tag(); }
williamr@2
    47
template <class _Container>
williamr@2
    48
inline output_iterator_tag _STLP_CALL
williamr@2
    49
iterator_category(const insert_iterator<_Container>&) { return output_iterator_tag(); }
williamr@2
    50
williamr@2
    51
# endif
williamr@2
    52
williamr@2
    53
# if defined (_STLP_MSVC50_COMPATIBILITY)
williamr@2
    54
# define __Reference _Reference, class _Pointer
williamr@2
    55
# define Reference__ _Reference, _Pointer
williamr@2
    56
template <class _BidirectionalIterator, class _Tp, 
williamr@2
    57
    __DFL_TMPL_PARAM(_Reference, _Tp& ),
williamr@2
    58
    __DFL_TMPL_PARAM(_Pointer, _Tp*),
williamr@2
    59
    __DFL_TYPE_PARAM(_Distance, ptrdiff_t)> 
williamr@2
    60
# else
williamr@2
    61
# define __Reference _Reference
williamr@2
    62
# define Reference__ _Reference
williamr@2
    63
template <class _BidirectionalIterator, class _Tp, __DFL_TMPL_PARAM(_Reference, _Tp& ),
williamr@2
    64
    __DFL_TYPE_PARAM(_Distance, ptrdiff_t)> 
williamr@2
    65
# endif
williamr@2
    66
class reverse_bidirectional_iterator {
williamr@2
    67
  typedef reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, 
williamr@2
    68
                                         Reference__, _Distance> _Self;
williamr@2
    69
  //  friend inline bool operator== _STLP_NULL_TMPL_ARGS (const _Self& x, const _Self& y);
williamr@2
    70
protected:
williamr@2
    71
  _BidirectionalIterator current;
williamr@2
    72
public:
williamr@2
    73
  typedef bidirectional_iterator_tag iterator_category;
williamr@2
    74
  typedef _Tp                        value_type;
williamr@2
    75
  typedef _Distance                  difference_type;
williamr@2
    76
# if defined (_STLP_MSVC50_COMPATIBILITY)
williamr@2
    77
  typedef _Pointer                   pointer;
williamr@2
    78
# else
williamr@2
    79
  typedef _Tp*                       pointer;
williamr@2
    80
# endif
williamr@2
    81
  typedef _Reference                 reference;
williamr@2
    82
williamr@2
    83
  reverse_bidirectional_iterator() {}
williamr@2
    84
  explicit reverse_bidirectional_iterator(_BidirectionalIterator __x)
williamr@2
    85
    : current(__x) {}
williamr@2
    86
  _BidirectionalIterator base() const { return current; }
williamr@2
    87
  _Reference operator*() const {
williamr@2
    88
    _BidirectionalIterator __tmp = current;
williamr@2
    89
    return *--__tmp;
williamr@2
    90
  }
williamr@2
    91
# if !(defined _STLP_NO_ARROW_OPERATOR)
williamr@2
    92
  _STLP_DEFINE_ARROW_OPERATOR
williamr@2
    93
# endif
williamr@2
    94
  _Self& operator++() {
williamr@2
    95
    --current;
williamr@2
    96
    return *this;
williamr@2
    97
  }
williamr@2
    98
  _Self operator++(int) {
williamr@2
    99
    _Self __tmp = *this;
williamr@2
   100
    --current;
williamr@2
   101
    return __tmp;
williamr@2
   102
  }
williamr@2
   103
  _Self& operator--() {
williamr@2
   104
    ++current;
williamr@2
   105
    return *this;
williamr@2
   106
  }
williamr@2
   107
  _Self operator--(int) {
williamr@2
   108
    _Self __tmp = *this;
williamr@2
   109
    ++current;
williamr@2
   110
    return __tmp;
williamr@2
   111
  }
williamr@2
   112
};
williamr@2
   113
williamr@2
   114
# ifdef _STLP_USE_OLD_HP_ITERATOR_QUERIES
williamr@2
   115
template <class _BidirectionalIterator, class _Tp, class __Reference, 
williamr@2
   116
          class _Distance>
williamr@2
   117
inline bidirectional_iterator_tag _STLP_CALL
williamr@2
   118
iterator_category(const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, Reference__, _Distance>&) 
williamr@2
   119
{ return bidirectional_iterator_tag(); }
williamr@2
   120
template <class _BidirectionalIterator, class _Tp, class __Reference, 
williamr@2
   121
  class _Distance>
williamr@2
   122
inline _Tp* _STLP_CALL
williamr@2
   123
value_type(const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, Reference__, _Distance>&)
williamr@2
   124
{ return (_Tp*) 0; }
williamr@2
   125
template <class _BidirectionalIterator, class _Tp, class __Reference, 
williamr@2
   126
          class _Distance>
williamr@2
   127
inline _Distance* _STLP_CALL
williamr@2
   128
distance_type(const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, Reference__, _Distance>&)
williamr@2
   129
{ return (_Distance*) 0; }
williamr@2
   130
#endif
williamr@2
   131
williamr@2
   132
template <class _BidirectionalIterator, class _Tp, class __Reference, 
williamr@2
   133
          class _Distance>
williamr@2
   134
inline bool  _STLP_CALL operator==(
williamr@2
   135
    const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
williamr@2
   136
                                               Reference__, _Distance>& __x,
williamr@2
   137
    const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
williamr@2
   138
                                               Reference__, _Distance>& __y)
williamr@2
   139
{
williamr@2
   140
  return __x.base() == __y.base();
williamr@2
   141
}
williamr@2
   142
williamr@2
   143
#ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE
williamr@2
   144
williamr@2
   145
template <class _BiIter, class _Tp, class __Reference, class _Distance>
williamr@2
   146
inline bool  _STLP_CALL operator!=(
williamr@2
   147
    const reverse_bidirectional_iterator<_BiIter, _Tp, Reference__, _Distance>& __x, 
williamr@2
   148
    const reverse_bidirectional_iterator<_BiIter, _Tp, Reference__, _Distance>& __y)
williamr@2
   149
{
williamr@2
   150
  return !(__x == __y);
williamr@2
   151
}
williamr@2
   152
williamr@2
   153
#endif /* _STLP_USE_SEPARATE_RELOPS_NAMESPACE */
williamr@2
   154
williamr@2
   155
#if ! defined ( _STLP_CLASS_PARTIAL_SPECIALIZATION )
williamr@2
   156
williamr@2
   157
// This is the old version of reverse_iterator, as found in the original
williamr@2
   158
//  HP STL.  It does not use partial specialization.
williamr@2
   159
williamr@2
   160
template <class _RandomAccessIterator, 
williamr@2
   161
# if defined (__MSL__) && (__MSL__ >= 0x2405) \
williamr@2
   162
	|| defined(__MRC__) || (defined(__SC__) && !defined(__DMC__))		//*ty 03/22/2001 - give the default to the secont param under MPW. 
williamr@2
   163
												// I believe giving the default will cause any harm even though the 2nd type parameter 
williamr@2
   164
												// still have to be provided for T* type iterators.
williamr@2
   165
	__DFL_TMPL_PARAM(_Tp,iterator_traits<_RandomAccessIterator>::value_type),
williamr@2
   166
# else
williamr@2
   167
	class _Tp,
williamr@2
   168
#endif
williamr@2
   169
 __DFL_TMPL_PARAM(_Reference,_Tp&),
williamr@2
   170
# if defined (_STLP_MSVC50_COMPATIBILITY)
williamr@2
   171
        __DFL_TMPL_PARAM(_Pointer, _Tp*),
williamr@2
   172
# endif
williamr@2
   173
        __DFL_TYPE_PARAM(_Distance,ptrdiff_t)> 
williamr@2
   174
class reverse_iterator {
williamr@2
   175
  typedef reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance>
williamr@2
   176
          _Self;
williamr@2
   177
protected:
williamr@2
   178
  _RandomAccessIterator __current;
williamr@2
   179
public:
williamr@2
   180
  typedef random_access_iterator_tag iterator_category;
williamr@2
   181
  typedef _Tp                        value_type;
williamr@2
   182
  typedef _Distance                  difference_type;
williamr@2
   183
# if defined (_STLP_MSVC50_COMPATIBILITY)
williamr@2
   184
  typedef _Pointer                   pointer;
williamr@2
   185
# else
williamr@2
   186
  typedef _Tp*                       pointer;
williamr@2
   187
# endif
williamr@2
   188
  typedef _Reference                 reference;
williamr@2
   189
williamr@2
   190
  reverse_iterator() {}
williamr@2
   191
  reverse_iterator(const _Self& __x) : __current(__x.base()) {}
williamr@2
   192
  explicit reverse_iterator(_RandomAccessIterator __x) : __current(__x) {}
williamr@2
   193
  _Self& operator=(const _Self& __x) {__current = __x.base(); return *this; }  
williamr@2
   194
       
williamr@2
   195
  _RandomAccessIterator base() const { return __current; }
williamr@2
   196
  _Reference operator*() const { return *(__current - (difference_type)1); }
williamr@2
   197
williamr@2
   198
# if !(defined _STLP_NO_ARROW_OPERATOR)
williamr@2
   199
  _STLP_DEFINE_ARROW_OPERATOR
williamr@2
   200
# endif
williamr@2
   201
williamr@2
   202
  _Self& operator++() {
williamr@2
   203
    --__current;
williamr@2
   204
    return *this;
williamr@2
   205
  }
williamr@2
   206
  _Self operator++(int) {
williamr@2
   207
    _Self __tmp = *this;
williamr@2
   208
    --__current;
williamr@2
   209
    return __tmp;
williamr@2
   210
  }
williamr@2
   211
  _Self& operator--() {
williamr@2
   212
    ++__current;
williamr@2
   213
    return *this;
williamr@2
   214
  }
williamr@2
   215
  _Self operator--(int) {
williamr@2
   216
    _Self __tmp = *this;
williamr@2
   217
    ++__current;
williamr@2
   218
    return __tmp;
williamr@2
   219
  }
williamr@2
   220
  _Self operator+(_Distance __n) const {
williamr@2
   221
    return _Self(__current - __n);
williamr@2
   222
  }
williamr@2
   223
  _Self& operator+=(_Distance __n) {
williamr@2
   224
    __current -= __n;
williamr@2
   225
    return *this;
williamr@2
   226
  }
williamr@2
   227
  _Self operator-(_Distance __n) const {
williamr@2
   228
    return _Self(__current + __n);
williamr@2
   229
  }
williamr@2
   230
  _Self& operator-=(_Distance __n) {
williamr@2
   231
    __current += __n;
williamr@2
   232
    return *this;
williamr@2
   233
  }
williamr@2
   234
  _Reference operator[](_Distance __n) const { return *(*this + __n); }
williamr@2
   235
};
williamr@2
   236
williamr@2
   237
# ifdef _STLP_USE_OLD_HP_ITERATOR_QUERIES
williamr@2
   238
template <class _RandomAccessIterator, class _Tp, 
williamr@2
   239
          class __Reference, class _Distance>
williamr@2
   240
inline random_access_iterator_tag _STLP_CALL
williamr@2
   241
iterator_category(const reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance>&)
williamr@2
   242
{ return random_access_iterator_tag(); }
williamr@2
   243
template <class _RandomAccessIterator, class _Tp,
williamr@2
   244
  class __Reference, class _Distance>
williamr@2
   245
inline _Tp*  _STLP_CALL value_type(const reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance>&)
williamr@2
   246
{ return (_Tp*) 0; }
williamr@2
   247
template <class _RandomAccessIterator, class _Tp,
williamr@2
   248
          class __Reference, class _Distance>
williamr@2
   249
inline _Distance*  _STLP_CALL
williamr@2
   250
distance_type(const reverse_iterator<_RandomAccessIterator, _Tp, Reference__, _Distance>&)
williamr@2
   251
{ return (_Distance*) 0; }
williamr@2
   252
#endif
williamr@2
   253
williamr@2
   254
template <class _RandomAccessIterator, class _Tp,
williamr@2
   255
          class __Reference, class _Distance>
williamr@2
   256
inline bool  _STLP_CALL
williamr@2
   257
operator==(const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   258
                                  Reference__, _Distance>& __x, 
williamr@2
   259
           const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   260
                                  Reference__, _Distance>& __y)
williamr@2
   261
{
williamr@2
   262
  return __x.base() == __y.base();
williamr@2
   263
}
williamr@2
   264
williamr@2
   265
template <class _RandomAccessIterator, class _Tp,
williamr@2
   266
          class __Reference, class _Distance>
williamr@2
   267
inline bool _STLP_CALL 
williamr@2
   268
operator<(const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   269
                                 Reference__, _Distance>& __x, 
williamr@2
   270
          const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   271
                                 Reference__, _Distance>& __y)
williamr@2
   272
{
williamr@2
   273
  return __y.base() < __x.base();
williamr@2
   274
}
williamr@2
   275
williamr@2
   276
#ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE
williamr@2
   277
williamr@2
   278
template <class _RandomAccessIterator, class _Tp,
williamr@2
   279
          class __Reference, class _Distance>
williamr@2
   280
inline bool _STLP_CALL 
williamr@2
   281
operator!=(const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   282
                                  Reference__, _Distance>& __x, 
williamr@2
   283
           const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   284
                                  Reference__, _Distance>& __y) {
williamr@2
   285
  return !(__x == __y);
williamr@2
   286
}
williamr@2
   287
williamr@2
   288
template <class _RandomAccessIterator, class _Tp,
williamr@2
   289
          class __Reference, class _Distance>
williamr@2
   290
inline bool _STLP_CALL 
williamr@2
   291
operator>(const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   292
                                 Reference__, _Distance>& __x, 
williamr@2
   293
          const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   294
                                 Reference__, _Distance>& __y) {
williamr@2
   295
  return __y < __x;
williamr@2
   296
}
williamr@2
   297
williamr@2
   298
template <class _RandomAccessIterator, class _Tp,
williamr@2
   299
          class __Reference, class _Distance>
williamr@2
   300
inline bool _STLP_CALL 
williamr@2
   301
operator<=(const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   302
                                  Reference__, _Distance>& __x, 
williamr@2
   303
           const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   304
                                  Reference__, _Distance>& __y) {
williamr@2
   305
  return !(__y < __x);
williamr@2
   306
}
williamr@2
   307
williamr@2
   308
template <class _RandomAccessIterator, class _Tp,
williamr@2
   309
          class __Reference, class _Distance>
williamr@2
   310
inline bool _STLP_CALL 
williamr@2
   311
operator>=(const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   312
                                  Reference__, _Distance>& __x, 
williamr@2
   313
           const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   314
                                  Reference__, _Distance>& __y) {
williamr@2
   315
  return !(__x < __y);
williamr@2
   316
}
williamr@2
   317
williamr@2
   318
#endif /* _STLP_USE_SEPARATE_RELOPS_NAMESPACE */
williamr@2
   319
williamr@2
   320
template <class _RandomAccessIterator, class _Tp,
williamr@2
   321
          class __Reference, class _Distance>
williamr@2
   322
inline _Distance  _STLP_CALL
williamr@2
   323
operator-(const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   324
                                 Reference__, _Distance>& __x, 
williamr@2
   325
          const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   326
                                 Reference__, _Distance>& __y)
williamr@2
   327
{
williamr@2
   328
  return __y.base() - __x.base();
williamr@2
   329
}
williamr@2
   330
williamr@2
   331
template <class _RandomAccessIterator, class _Tp,
williamr@2
   332
          class __Reference, class _Distance>
williamr@2
   333
inline reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   334
                        Reference__, _Distance>  _STLP_CALL
williamr@2
   335
operator+(_Distance __n,
williamr@2
   336
          const reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   337
                                 Reference__, _Distance>& __x)
williamr@2
   338
{
williamr@2
   339
  return reverse_iterator<_RandomAccessIterator, _Tp,
williamr@2
   340
                          Reference__, _Distance>(__x.base() - __n);
williamr@2
   341
}
williamr@2
   342
williamr@2
   343
#endif /* ! defined ( _STLP_CLASS_PARTIAL_SPECIALIZATION ) */
williamr@2
   344
williamr@2
   345
_STLP_END_NAMESPACE
williamr@2
   346
williamr@2
   347
#endif /* _STLP_INTERNAL_ITERATOR_H */
williamr@2
   348
williamr@2
   349
// Local Variables:
williamr@2
   350
// mode:C++
williamr@2
   351
// End: