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_FUN_V2V_PROJECTION_HH
00027 # define MLN_FUN_V2V_PROJECTION_HH
00028
00032
00033 # include <mln/core/concept/function.hh>
00034 # include <mln/core/point.hh>
00035 # include <mln/core/grids.hh>
00036
00037
00038 namespace mln
00039 {
00040
00041 namespace fun
00042 {
00043
00044 namespace v2v
00045 {
00046
00047 template <typename P, unsigned dir>
00048 struct projection : public Function_v2v< projection<P,dir> >
00049 {
00050 private:
00051 typedef mln_grid(P) G_;
00052 typedef mln_coord(P) C_;
00053 enum { n_ = G_::dim };
00054
00055 public:
00056
00057 typedef point<mln_regular_grid_from_dim(n_ - 1), C_> result;
00058 typedef P argument;
00059
00060 result operator()(const P& p) const;
00061 };
00062
00063
00064 # ifndef MLN_INCLUDE_ONLY
00065
00066 template <typename P, unsigned dir>
00067 inline
00068 typename projection<P, dir>::result
00069 projection<P, dir>::operator()(const P& p) const
00070 {
00071 result tmp;
00072 for (unsigned i = 0, j = 0; i < n_; ++i)
00073 if (i == dir)
00074 continue;
00075 else
00076 tmp[j++] = p[i];
00077 return tmp;
00078 }
00079
00080 # endif // ! MLN_INCLUDE_ONLY
00081
00082 }
00083
00084 }
00085
00086 }
00087
00088
00089 #endif // ! MLN_FUN_V2V_PROJECTION_HH