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 #ifndef OLENA_CORE_FWD_ITER1D_HH
00029 # define OLENA_CORE_FWD_ITER1D_HH
00030
00031 # include <oln/core/abstract/iter1d.hh>
00032
00033 namespace oln {
00034
00035 template<class Exact = mlc::final>
00036 class fwd_iter1d;
00037
00038 template<class Exact>
00039 struct iter_traits<fwd_iter1d<Exact> >: public
00040 iter_traits<abstract::iter1d<typename
00041 mlc::exact_vt<fwd_iter1d<Exact>, Exact>::ret> >
00042 {
00043 typedef point1d point_type;
00044 typedef dpoint1d dpoint_type;
00045 };
00046
00054 template<class Exact>
00055 class fwd_iter1d : public abstract::iter1d<typename mlc::exact_vt<fwd_iter1d<Exact>, Exact>::ret>
00056 {
00057
00058 public:
00059
00060 typedef typename mlc::exact_vt<fwd_iter1d<Exact>, Exact>::ret exact_type;
00062
00063 typedef abstract::iter1d<exact_type> super_type;
00064 typedef abstract::iter<exact_type> super_iter_type;
00066
00067 enum { dim = iter_traits<exact_type>::dim };
00068
00074 typedef typename iter_traits<exact_type>::point_type point_type;
00075
00076 friend class abstract::iter<exact_type>;
00077 friend class abstract::iter1d<exact_type>;
00078
00083 template<class Image>
00084 fwd_iter1d(const Image& ima) :
00085 super_type(ima.size())
00086 {}
00087
00093 template<class U>
00094 U
00095 operator=(U u)
00096 {
00097 return super_iter_type::operator=(u);
00098 }
00099
00101 static std::string
00102 name()
00103 {
00104 return "fwd_iter1d<" + Exact::name() + ">";
00105 }
00106
00107 protected:
00108
00114 void
00115 goto_begin_()
00116 {
00117 this->p_.col() = 0;
00118 }
00119
00125 void
00126 goto_end_()
00127 {
00128 this->p_.col() = this->ncols_;
00129 }
00130
00135 bool
00136 is_at_end_() const
00137 {
00138 return this->p_.col() == this->ncols_;
00139 }
00140
00144 void
00145 goto_next_()
00146 {
00147 ++(this->p_.col());
00148 }
00149
00150 };
00151
00152 }
00153
00154 #endif // ! OLENA_CORE_FWD_ITER1D_HH