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_CORE_IMAGE_GRAPH_ELT_WINDOW_HH
00027 # define MLN_CORE_IMAGE_GRAPH_ELT_WINDOW_HH
00028
00032
00033 # include <mln/core/concept/window.hh>
00034 # include <mln/core/internal/neighborhood_base.hh>
00035 # include <mln/core/internal/graph_window_base.hh>
00036 # include <mln/core/image/graph_window_piter.hh>
00037
00038
00039 namespace mln
00040 {
00041
00043 template <typename G, typename S> class graph_elt_window;
00044 template <typename G, typename F> struct p_edges;
00045 template <typename G, typename F> struct p_vertices;
00046
00047
00048 namespace internal
00049 {
00050
00051 template <typename G, typename S, typename E>
00052 struct neighborhood_impl<graph_elt_window<G,S>,E>
00053 : public neighborhood_extra_impl<graph_elt_window<G,S>,E>
00054 {
00055 };
00056
00057
00060 template <typename G, typename S>
00061 struct graph_window_iter_dispatch;
00062
00063 template <typename G, typename F>
00064 struct graph_window_iter_dispatch<G, p_edges<G,F> >
00065 {
00066 typedef mln_edge_nbh_edge_fwd_iter(G) nbh_fwd_iter_;
00067 typedef mln_edge_nbh_edge_bkd_iter(G) nbh_bkd_iter_;
00068 };
00069
00070 template <typename G, typename F>
00071 struct graph_window_iter_dispatch<G, p_vertices<G,F> >
00072 {
00073 typedef mln_vertex_nbh_vertex_fwd_iter(G) nbh_fwd_iter_;
00074 typedef mln_vertex_nbh_vertex_bkd_iter(G) nbh_bkd_iter_;
00075 };
00076
00077
00078 }
00079
00080
00081 namespace trait
00082 {
00083
00084 template <typename G, typename S>
00085 struct window_< mln::graph_elt_window<G,S> >
00086 {
00087 typedef trait::window::size::unknown size;
00088 typedef trait::window::support::irregular support;
00089 typedef trait::window::definition::varying definition;
00090 };
00091
00092 }
00093
00094
00098 template <typename G, typename S>
00099 class graph_elt_window
00100 : public graph_window_base<mln_result(S::fun_t),
00101 graph_elt_window<G,S> >,
00102 public internal::graph_window_iter_dispatch<G,S>
00103 {
00104 typedef graph_elt_window<G,S> self_;
00105 typedef internal::graph_window_iter_dispatch<G,S> super_;
00106
00107 typedef typename super_::nbh_fwd_iter_ nbh_fwd_iter_;
00108 typedef typename super_::nbh_bkd_iter_ nbh_bkd_iter_;
00109
00110 public:
00113 typedef S target;
00115 typedef mln_psite(target) psite;
00116
00119 typedef graph_window_piter<target,self_,nbh_fwd_iter_> fwd_qiter;
00120
00123 typedef graph_window_piter<target,self_,nbh_bkd_iter_> bkd_qiter;
00124
00126 typedef fwd_qiter qiter;
00128
00129 };
00130
00131 }
00132
00133
00134 #endif // ! MLN_CORE_IMAGE_GRAPH_ELT_WINDOW_HH