• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List

complex_set_iterator_base.hh

00001 // Copyright (C) 2008, 2009, 2010 EPITA Research and Development
00002 // Laboratory (LRDE)
00003 //
00004 // This file is part of Olena.
00005 //
00006 // Olena is free software: you can redistribute it and/or modify it under
00007 // the terms of the GNU General Public License as published by the Free
00008 // Software Foundation, version 2 of the License.
00009 //
00010 // Olena is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with Olena.  If not, see <http://www.gnu.org/licenses/>.
00017 //
00018 // As a special exception, you may use this file as part of a free
00019 // software project without restriction.  Specifically, if other files
00020 // instantiate templates or use macros or inline functions from this
00021 // file, or you compile this file and link it with other files to produce
00022 // an executable, this file does not by itself cause the resulting
00023 // executable to be covered by the GNU General Public License.  This
00024 // exception does not however invalidate any other reasons why the
00025 // executable file might be covered by the GNU General Public License.
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       // Forward declaration.
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         // FIXME: Maybe we could just get the dimension D of the face's
00065         // complex, an define complex_type as mln::complex<D>?
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         // Invalidate f_.
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         // Invalidate f_.
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     } // end of namespace mln::topo::internal
00135 
00136   } // end of namespace mln::topo
00137 
00138 } // end of namespace mln
00139 
00140 #endif // ! MLN_TOPO_INTERNAL_COMPLEX_SET_ITERATOR_BASE_HH

Generated on Tue Oct 4 2011 15:23:37 for Milena (Olena) by  doxygen 1.7.1