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_INTERNAL_COMPLEX_SET_ITERATOR_BASE_HH
00028 # define MLN_TOPO_INTERNAL_COMPLEX_SET_ITERATOR_BASE_HH
00029 
00034 
00035 # include <mln/topo/internal/complex_iterator_base.hh>
00036 
00037 
00038 namespace mln
00039 {
00040 
00041   namespace topo
00042   {
00043 
00044     namespace internal
00045     {
00046 
00047       
00048       template <typename F, typename E>
00049       class complex_iterator_base;
00050 
00051 
00056       template <typename F, typename E>
00057       class complex_set_iterator_base : public complex_iterator_base<F, E>
00058       {
00059         typedef complex_set_iterator_base<F, E> self_;
00060 
00061       public:
00063         typedef F face_type;
00064         
00065         
00066         typedef typename F::complex_type complex_type;
00067 
00070         complex_set_iterator_base();
00071         complex_set_iterator_base(const complex_type& c);
00073 
00077         void set_cplx(const complex_type& c);
00078 
00080         bool is_valid() const;
00082         void invalidate();
00084       };
00085 
00086 
00087 
00088 # ifndef MLN_INCLUDE_ONLY
00089 
00090       template <typename F, typename E>
00091       inline
00092       complex_set_iterator_base<F, E>::complex_set_iterator_base()
00093       {
00094         invalidate();
00095       }
00096 
00097       template <typename F, typename E>
00098       inline
00099       complex_set_iterator_base<F, E>::complex_set_iterator_base(const complex_type& c)
00100       {
00101         this->f_.set_cplx(c);
00102         
00103         invalidate();
00104       }
00105 
00106       template <typename F, typename E>
00107       inline
00108       void
00109       complex_set_iterator_base<F, E>::set_cplx(const complex_type& c)
00110       {
00111         this->f_.set_cplx(c);
00112         
00113         invalidate();
00114       }
00115 
00116       template <typename F, typename E>
00117       inline
00118       bool
00119       complex_set_iterator_base<F, E>::is_valid() const
00120       {
00121         return this->f_.is_valid();
00122       }
00123 
00124       template <typename F, typename E>
00125       inline
00126       void
00127       complex_set_iterator_base<F, E>::invalidate()
00128       {
00129         this->f_.invalidate();
00130       }
00131 
00132 # endif // ! MLN_INCLUDE_ONLY
00133 
00134     } 
00135 
00136   } 
00137 
00138 } 
00139 
00140 #endif // ! MLN_TOPO_INTERNAL_COMPLEX_SET_ITERATOR_BASE_HH