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 #ifndef MLN_MAKE_CELL_HH
00027 # define MLN_MAKE_CELL_HH
00028
00031
00032 # include <mln/core/site_set/p_set.hh>
00033 # include <mln/core/site_set/complex_psite.hh>
00034 # include <mln/core/image/complex_neighborhoods.hh>
00035 # include <mln/core/image/complex_neighborhood_piter.hh>
00036
00037 # include <mln/topo/is_facet.hh>
00038
00039 namespace mln
00040 {
00041
00042 namespace make
00043 {
00044
00053 template <unsigned D, typename G>
00054 p_set< complex_psite<D, G> >
00055 cell(const complex_psite<D, G>& f);
00056
00057
00058 # ifndef MLN_INCLUDE_ONLY
00059
00060 template <unsigned D, typename G>
00061 inline
00062 p_set< complex_psite<D, G> >
00063 cell(const complex_psite<D, G>& f)
00064 {
00065 mln_precondition(topo::is_facet(f));
00066
00067 typedef complex_psite<D, G> psite;
00068 typedef p_set<psite> faces_t;
00069
00070
00071 faces_t f_hat;
00072
00073
00074 typedef complex_m_face_neighborhood<D, G> m_faces_nbh_t;
00075 m_faces_nbh_t m_faces_nbh;
00076 mln_niter(m_faces_nbh_t) g(m_faces_nbh, f);
00077 for (unsigned m = 0; m < f.n(); ++m)
00078 {
00079 g.iter().set_m(m);
00080 for_all(g)
00081 {
00082 f_hat.insert(g);
00083 }
00084 }
00085 f_hat.insert(f);
00086 return f_hat;
00087 }
00088
00089 # endif // MLN_INCLUDE_ONLY
00090
00091 }
00092
00093 }
00094
00095 #endif // ! MLN_MAKE_CELL_HH