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