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_COMPONENT_COMP_HH
00027 # define MLN_FUN_COMPONENT_COMP_HH
00028
00032
00033 # include <mln/fun/unary_param.hh>
00034 # include <mln/value/rgb.hh>
00035 # include <mln/value/int_u.hh>
00036 # include <mln/algebra/vec.hh>
00037
00038 namespace mln
00039 {
00040
00041 namespace fun
00042 {
00043
00044 struct comp : unary_param<comp,unsigned>
00045 {
00046 comp() : unary_param<comp,unsigned>(0) {};
00047 comp(unsigned i) : unary_param<comp,unsigned>(i) {};
00048 };
00049
00050 }
00051
00052 # ifndef MLN_INCLUDE_ONLY
00053
00054 namespace trait
00055 {
00056
00057 namespace next
00058 {
00059
00060 template <unsigned n>
00061 struct set_precise_unary_<mln::fun::comp, mln::value::rgb<n> >
00062 {
00063 typedef set_precise_unary_ ret;
00064
00065 typedef mln::value::rgb<n> argument;
00066 typedef mln::value::int_u<n> result;
00067 typedef argument& lvalue;
00068
00069 static result read(unsigned p_i, const argument& v)
00070 {
00071 return v.comp(p_i);
00072 }
00073
00074 static void write(unsigned p_i, lvalue l, const result& x)
00075 {
00076 l.comp(p_i) = x;
00077 }
00078 };
00079
00080 template <unsigned n, typename T>
00081 struct set_precise_unary_<mln::fun::comp, mln::algebra::vec<n,T> >
00082 {
00083 typedef set_precise_unary_ ret;
00084
00085 typedef mln::algebra::vec<n,T> argument;
00086 typedef T result;
00087 typedef argument& lvalue;
00088
00089 static result read(unsigned p_i, const argument& v)
00090 {
00091 return v[p_i];
00092 }
00093
00094 static void write(unsigned p_i, lvalue l, const result& x)
00095 {
00096 l[p_i] = x;
00097 }
00098 };
00099
00100 }
00101
00102 }
00103
00104 # endif // ! MLN_INCLUDE_ONLY
00105
00106 }
00107
00108 #endif // ! MLN_FUN_COMPONENT_COMP_HH