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_VERTEX_IMAGE_HH
00027 # define MLN_MAKE_VERTEX_IMAGE_HH
00028
00032
00033 # include <mln/core/image/vertex_image.hh>
00034 # include <mln/core/concept/function.hh>
00035 # include <mln/util/internal/id2element.hh>
00036
00037
00038 namespace mln
00039 {
00040
00041 namespace make
00042 {
00043
00044
00051
00052 template <typename G, typename FV>
00053 mln::vertex_image<void,mln_result(FV),G>
00054 vertex_image(const Graph<G>& g, const Function_v2v<FV>& fv);
00055
00056
00064
00065 template <typename FP, typename FV, typename G>
00066 mln::vertex_image<mln_result(FP),mln_result(FV),G>
00067 vertex_image(const Graph<G>& g_,
00068 const Function_v2v<FP>& fp,
00069 const Function_v2v<FV>& fv);
00070
00071
00072
00073 # ifndef MLN_INCLUDE_ONLY
00074
00075 template <typename G, typename FV>
00076 mln::vertex_image<void,mln_result(FV),G>
00077 vertex_image(const Graph<G>& g, const Function_v2v<FV>& fv)
00078 {
00079 trace::entering("make::vertex_image");
00080 mln_precondition(exact(g).is_valid());
00081
00082 p_vertices<G> pv(g);
00083 mln::vertex_image<void,mln_result(FV),G> ima(pv, fv);
00084
00085 trace::exiting("make::vertex_image");
00086 return ima;
00087 }
00088
00089
00090 template <typename FP, typename FV, typename G>
00091 mln::vertex_image<mln_result(FP),mln_result(FV),G>
00092 vertex_image(const Graph<G>& g_,
00093 const Function_v2v<FP>& fp,
00094 const Function_v2v<FV>& fv)
00095 {
00096 trace::entering("make::vertex_image");
00097 const G& g = exact(g_);
00098 mln_precondition(g.is_valid());
00099
00100 p_vertices<G,FP> pv(g,fp);
00101 mln::vertex_image<mln_result(FP),mln_result(FV),G> ima(pv, fv);
00102
00103 trace::exiting("make::vertex_image");
00104 return ima;
00105 }
00106
00107 # endif // ! MLN_INCLUDE_ONLY
00108
00109
00110 }
00111
00112 }
00113
00114 #endif // ! MLN_MAKE_VERTEX_IMAGE_HH