00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
#ifndef _CPP_BACKWARD_ITERATOR_H
00028
#define _CPP_BACKWARD_ITERATOR_H 1
00029
00030
#include "backward_warning.h"
00031
#include "function.h"
00032
#include <stddef.h>
00033
#include "iostream.h"
00034
#include <iterator>
00035
00036
#include <bits/stl_construct.h>
00037
#include <bits/stl_raw_storage_iter.h>
00038
00039
#include <ext/iterator>
00040
00041
00042
using std::input_iterator_tag;
00043
using std::output_iterator_tag;
00044
using std::forward_iterator_tag;
00045
using std::bidirectional_iterator_tag;
00046
using std::random_access_iterator_tag;
00047
00048
#if 0
00049
using std::iterator;
00050
#endif
00051
00052
00053
00054
00055
00056
template<
typename _Tp,
typename _Distance>
00057
struct input_iterator {
00058
typedef input_iterator_tag iterator_category;
00059
typedef _Tp value_type;
00060
typedef _Distance difference_type;
00061
typedef _Tp* pointer;
00062
typedef _Tp& reference;
00063 };
00064
00065
struct output_iterator {
00066
typedef output_iterator_tag iterator_category;
00067
typedef void value_type;
00068
typedef void difference_type;
00069
typedef void pointer;
00070
typedef void reference;
00071 };
00072
00073
template<
typename _Tp,
typename _Distance>
00074
struct forward_iterator {
00075
typedef forward_iterator_tag iterator_category;
00076
typedef _Tp value_type;
00077
typedef _Distance difference_type;
00078
typedef _Tp* pointer;
00079
typedef _Tp& reference;
00080 };
00081
00082
template<
typename _Tp,
typename _Distance>
00083
struct bidirectional_iterator {
00084
typedef bidirectional_iterator_tag iterator_category;
00085
typedef _Tp value_type;
00086
typedef _Distance difference_type;
00087
typedef _Tp* pointer;
00088
typedef _Tp& reference;
00089 };
00090
00091
template<
typename _Tp,
typename _Distance>
00092
struct random_access_iterator {
00093
typedef random_access_iterator_tag iterator_category;
00094
typedef _Tp value_type;
00095
typedef _Distance difference_type;
00096
typedef _Tp* pointer;
00097
typedef _Tp& reference;
00098 };
00099
00100
using std::iterator_traits;
00101
00102
template <
class _Iter>
00103
inline typename iterator_traits<_Iter>::iterator_category
00104 iterator_category(
const _Iter& __i)
00105 {
return __iterator_category(__i); }
00106
00107
template <
class _Iter>
00108
inline typename iterator_traits<_Iter>::difference_type*
00109 distance_type(
const _Iter&)
00110 {
return static_cast<typename iterator_traits<_Iter>::difference_type*>(0); }
00111
00112
template<
class _Iter>
00113
inline typename iterator_traits<_Iter>::value_type*
00114 value_type(
const _Iter& __i)
00115 {
return static_cast<typename iterator_traits<_Iter>::value_type*>(0); }
00116
00117
using std::distance;
00118
using __gnu_cxx::distance;
00119
using std::advance;
00120
00121
using std::insert_iterator;
00122
using std::front_insert_iterator;
00123
using std::back_insert_iterator;
00124
using std::inserter;
00125
using std::front_inserter;
00126
using std::back_inserter;
00127
00128
using std::reverse_iterator;
00129
00130
using std::istream_iterator;
00131
using std::ostream_iterator;
00132
00133
00134
template<
class _T1,
class _T2>
00135
inline void
00136 construct(_T1* __p,
const _T2& __value)
00137 { std::_Construct(__p, __value); }
00138
00139
template<
class _T1>
00140
inline void
00141 construct(_T1* __p)
00142 { std::_Construct(__p); }
00143
00144
template <
class _Tp>
00145
inline void
00146 destroy(_Tp* __pointer)
00147 { std::_Destroy(__pointer); }
00148
00149
template <
class _ForwardIterator>
00150
inline void
00151 destroy(_ForwardIterator __first, _ForwardIterator __last)
00152 { std::_Destroy(__first, __last); }
00153
00154
00155
00156
using std::raw_storage_iterator;
00157
00158
#endif
00159
00160
00161
00162