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 MLN_TOPO_ADJ_LOWER_FACE_ITER_HH
00028 # define MLN_TOPO_ADJ_LOWER_FACE_ITER_HH
00029
00034
00035 # include <mln/topo/internal/complex_relative_iterator_base.hh>
00036 # include <mln/topo/algebraic_face.hh>
00037
00038
00039 namespace mln
00040 {
00041
00042 namespace topo
00043 {
00044
00045
00046 template <unsigned D> class complex;
00047
00048 namespace internal
00049 {
00050
00051 template <typename C, typename F, typename E>
00052 class forward_complex_relative_iterator_base;
00053
00054 template <typename C, typename F, typename E>
00055 class backward_complex_relative_iterator_base;
00056
00057 }
00058
00059 template <unsigned D>
00060 class algebraic_face;
00061
00062
00063
00064
00065
00066
00071
00072 template <unsigned D>
00073 class adj_lower_face_fwd_iter
00074 : public internal::forward_complex_relative_iterator_base< topo::face<D>,
00075 algebraic_face<D>,
00076 adj_lower_face_fwd_iter<D> >
00077 {
00078
00079 private:
00080 typedef adj_lower_face_fwd_iter<D> self_;
00081 typedef internal::forward_complex_relative_iterator_base< topo::face<D>,
00082 algebraic_face<D>,
00083 self_ > super_;
00084
00085 public:
00088 adj_lower_face_fwd_iter();
00089 template <typename Fref>
00090 adj_lower_face_fwd_iter(const Fref& f_ref);
00092
00094 void update_adj_faces_();
00095 };
00096
00097
00098
00099
00100
00101
00106
00107 template <unsigned D>
00108 class adj_lower_face_bkd_iter
00109 : public internal::backward_complex_relative_iterator_base< topo::face<D>,
00110 algebraic_face<D>,
00111 adj_lower_face_bkd_iter<D> >
00112 {
00113
00114 private:
00115 typedef adj_lower_face_bkd_iter<D> self_;
00116 typedef internal::backward_complex_relative_iterator_base< topo::face<D>,
00117 algebraic_face<D>,
00118 self_ > super_;
00119 public:
00122 adj_lower_face_bkd_iter();
00123 template <typename Fref>
00124 adj_lower_face_bkd_iter(const Fref& f_ref);
00126
00128 void update_adj_faces_();
00129 };
00130
00131
00132
00133 # ifndef MLN_INCLUDE_ONLY
00134
00135
00136
00137
00138
00139 template <unsigned D>
00140 inline
00141 adj_lower_face_fwd_iter<D>::adj_lower_face_fwd_iter()
00142 {
00143 }
00144
00145 template <unsigned D>
00146 template <typename Fref>
00147 inline
00148 adj_lower_face_fwd_iter<D>::adj_lower_face_fwd_iter(const Fref& f_ref)
00149 : super_(f_ref)
00150 {
00151 }
00152
00153 template <unsigned D>
00154 inline
00155 void
00156 adj_lower_face_fwd_iter<D>::update_adj_faces_()
00157 {
00158 mln_precondition(this->c_);
00159 this->adj_faces_ = this->c_->lower_dim_adj_faces();
00160 }
00161
00162
00163
00164
00165
00166
00167 template <unsigned D>
00168 inline
00169 adj_lower_face_bkd_iter<D>::adj_lower_face_bkd_iter()
00170 {
00171 }
00172
00173 template <unsigned D>
00174 template <typename Fref>
00175 inline
00176 adj_lower_face_bkd_iter<D>::adj_lower_face_bkd_iter(const Fref& f_ref)
00177 : super_(f_ref)
00178 {
00179 }
00180
00181 template <unsigned D>
00182 inline
00183 void
00184 adj_lower_face_bkd_iter<D>::update_adj_faces_()
00185 {
00186 mln_precondition(this->c_);
00187 this->adj_faces_ = this->c_->lower_dim_adj_faces();
00188 }
00189
00190 # endif // ! MLN_INCLUDE_ONLY
00191
00192 }
00193
00194 }
00195
00196 #endif // ! MLN_TOPO_ADJ_LOWER_FACE_ITER_HH