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
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00048 #ifndef STLSOFT_INCL_STLSOFT_ITERATORS_HPP_CONTIGUOUS_DILUTER_ITERATOR
00049 #define STLSOFT_INCL_STLSOFT_ITERATORS_HPP_CONTIGUOUS_DILUTER_ITERATOR
00050
00051 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_CONTIGUOUS_DILUTER_ITERATOR_MAJOR 1
00053 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_CONTIGUOUS_DILUTER_ITERATOR_MINOR 0
00054 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_CONTIGUOUS_DILUTER_ITERATOR_REVISION 4
00055 # define STLSOFT_VER_STLSOFT_ITERATORS_HPP_CONTIGUOUS_DILUTER_ITERATOR_EDIT 12
00056 #endif
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00067 # include <stlsoft/stlsoft.h>
00068 #endif
00069 #ifndef STLSOFT_INCL_STLSOFT_UTIL_STD_HPP_ITERATOR_HELPER
00070 # include <stlsoft/util/std/iterator_helper.hpp>
00071 #endif
00072
00073
00074
00075
00076
00077 #ifndef _STLSOFT_NO_NAMESPACE
00078 namespace stlsoft
00079 {
00080 #endif
00081
00082
00083
00084
00085
00097 template< ss_typename_param_k T
00098 , ss_typename_param_k C = stlsoft_ns_qual_std(bidirectional_iterator_tag)
00099 , ss_typename_param_k D = ss_ptrdiff_t
00100 , ss_typename_param_k P = T *
00101 , ss_typename_param_k R = T &
00102 >
00103
00104 class contiguous_diluter_iterator
00105 : public iterator_base<C, T, D, P, R>
00106 {
00109 private:
00110 typedef iterator_base<C, T, D, P, R> parent_class_type;
00111 public:
00112 typedef contiguous_diluter_iterator<T, C, D, P, R> class_type;
00113 typedef ss_typename_type_k parent_class_type::pointer pointer;
00114 typedef ss_typename_type_k parent_class_type::reference reference;
00116
00119 public:
00121 contiguous_diluter_iterator(pointer p)
00122 : m_p(p)
00123 {}
00125
00128 public:
00130 reference operator *()
00131 {
00132 return *m_p;
00133 }
00135 class_type& operator ++()
00136 {
00137 ++m_p;
00138
00139 return *this;
00140 }
00142 class_type& operator ++(int)
00143 {
00144 class_type r(*this);
00145
00146 operator ++();
00147
00148 return r;
00149 }
00150
00151 ss_bool_t equal(class_type const& rhs) const
00152 {
00153 return m_p == rhs.m_p;
00154 }
00155 ss_bool_t operator ==(class_type const& rhs) const
00156 {
00157 return equal(rhs);
00158 }
00159 ss_bool_t operator !=(class_type const& rhs) const
00160 {
00161 return !equal(rhs);
00162 }
00164
00167 public:
00169 class_type& operator --()
00170 {
00171 --m_p;
00172
00173 return *this;
00174 }
00176 class_type& operator --(int)
00177 {
00178 class_type r(*this);
00179
00180 operator --();
00181
00182 return r;
00183 }
00185
00188 private:
00189 pointer m_p;
00191 };
00192
00194
00195
00196 #ifdef STLSOFT_UNITTEST
00197 # include "./unittest/contiguous_diluter_iterator_unittest_.h"
00198 #endif
00199
00200
00201
00202 #ifndef _STLSOFT_NO_NAMESPACE
00203 }
00204 #endif
00205
00206
00207
00208 #endif
00209
00210