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_TRAIT_NEXT_SOLVE_PROXY_HH
00027 # define MLN_TRAIT_NEXT_SOLVE_PROXY_HH
00028
00032
00033
00034 # include <mln/core/concept/object.hh>
00035 # include <mln/core/concept/proxy.hh>
00036 # include <mln/core/concept/proxy.hxx>
00037
00038 # include <mln/trait/next/solve.hh>
00039
00040 namespace mln
00041 {
00042
00043 namespace trait
00044 {
00045
00046 namespace next
00047 {
00048
00049
00050
00051 template < typename Name, typename L_, typename R_ >
00052 struct solve_binary;
00053 template < typename Name, typename T_ > struct solve_unary;
00054
00055
00056
00057
00058
00059 template < typename Op, typename P >
00060 struct set_unary_< Op, mln::Proxy, P >
00061 {
00062 typedef mlc_unqualif(mln_q_subject(P)) S;
00063 typedef mln_trait_nunary(Op, S) ret;
00064 };
00065
00066
00067
00068 template < typename Op, typename L, typename R >
00069 struct set_binary_< Op, mln::Proxy, L, mln::Proxy, R >
00070 {
00071 typedef mln::internal::helper_unprox_binop<L, R> helper;
00072 typedef mln_trait_nbinary(Op,
00073 typename helper::L_ret,
00074 typename helper::R_ret) ret;
00075 };
00076
00077 template < typename Op, typename P, typename O >
00078 struct set_binary_< Op, mln::Proxy, P, mln::Object, O >
00079 {
00080 typedef mlc_unqualif(mln_q_subject(P)) S;
00081 typedef mln_trait_nbinary(Op, S, O) ret;
00082 };
00083
00084 template < typename Op, typename O, typename P >
00085 struct set_binary_< Op, mln::Object, O, mln::Proxy, P >
00086 {
00087 typedef mlc_unqualif(mln_q_subject(P)) S;
00088 typedef mln_trait_nbinary(Op, O, S) ret;
00089 };
00090
00091 }
00092
00093 }
00094
00095 }
00096
00097
00098 #endif // ! MLN_TRAIT_NEXT_SOLVE_PROXY_HH