26 #ifndef MLN_CORE_TRAIT_OP_MULT_HH
27 # define MLN_CORE_TRAIT_OP_MULT_HH
37 # define mln_op_mult(T, U) typename mln::trait::op_mult< T , U >::ret
47 template <
unsigned n,
typename T>
50 template <
unsigned n,
unsigned m,
typename T>
58 template <
typename T,
typename U>
101 template <
unsigned n,
typename T,
typename U>
102 struct op_mult<algebra::
vec<n, T>, U>
104 typedef algebra::vec<n, mln_op_mult(T, U)>
ret;
106 template <
typename U,
unsigned n,
typename T>
107 struct op_mult<U, algebra::
vec<n, T> >
109 typedef algebra::vec<n, mln_op_mult(T, U)>
ret;
112 template <
unsigned n,
unsigned m,
typename T,
typename U>
113 struct op_mult<algebra::
mat<n, m, T>, U>
115 typedef algebra::mat<n, m, mln_op_mult(T, U)>
ret;
117 template <
typename U,
unsigned n,
unsigned m,
typename T>
118 struct op_mult<U, algebra::
mat<n, m, T> >
120 typedef algebra::mat<n, m, mln_op_mult(T, U)>
ret;
123 template <
unsigned n,
unsigned o,
typename T,
unsigned m,
typename U>
124 struct op_mult<algebra::
mat<n, o, T>, algebra::mat<o, m, U> >
126 typedef algebra::mat<n, m, mln_op_mult(T, U)>
ret;
129 template <
unsigned m,
unsigned n,
typename T,
typename U>
130 struct op_mult<algebra::
mat<m, n, T>, algebra::vec<n, U> >
132 typedef algebra::mat<m, 1, mln_op_mult(T, U)>
ret;
135 template <
unsigned n,
typename U,
unsigned m,
typename T>
136 struct op_mult< algebra::
vec<n, U>, algebra::mat<n, m, T> >
138 typedef algebra::mat<1, m, mln_op_mult(T, U)>
ret;
146 #endif // ! MLN_CORE_TRAIT_OP_MULT_HH