00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MTL_OPERATORS_INCLUDE
00013 #define MTL_OPERATORS_INCLUDE
00014
00015 #include <boost/numeric/mtl/utility/ashape.hpp>
00016 #include <boost/numeric/mtl/matrix/operators.hpp>
00017
00018 #include <boost/numeric/mtl/operation/mult_result.hpp>
00019 #include <boost/numeric/mtl/operation/div_result.hpp>
00020 #include <boost/numeric/mtl/operation/dot.hpp>
00021 #include <boost/numeric/mtl/matrix/all_mat_expr.hpp>
00022 #include <boost/numeric/mtl/utility/enable_if.hpp>
00023
00024
00025 namespace mtl {
00026
00027 namespace matrix {
00028
00030
00031 template <typename Op1, typename Op2>
00032 typename mtl::traits::mult_result<Op1, Op2>::type
00033 inline operator*(const Op1& op1, const Op2& op2)
00034 {
00035 return typename mtl::traits::mult_result<Op1, Op2>::type(op1, op2);
00036 }
00037
00038
00039
00041
00042
00043 template < typename Op1, typename Op2 >
00044 typename mtl::traits::div_result<Op1,Op2>::type
00045 inline operator/(const Op1& op1, const Op2& op2)
00046 {
00047 return typename mtl::traits::div_result<Op1,Op2>::type(op1,op2);
00048 }
00049
00050 }
00051
00052
00053 namespace vector {
00054
00056
00057 template <typename Op1, typename Op2>
00058 typename mtl::traits::vec_mult_result<Op1, Op2>::type
00059 inline operator*(const Op1& op1, const Op2& op2)
00060 {
00061 return typename mtl::traits::vec_mult_result<Op1, Op2>::type(op1, op2);
00062 }
00063
00065 template <typename Op1, typename Op2>
00066 typename traits::lazy_enable_if_rvec_cvec_mult<Op1, Op2, detail::dot_result<Op1, Op2> >::type
00067 inline operator*(const Op1& op1, const Op2& op2)
00068 {
00069 return dot_real(op1, op2);
00070 }
00071
00073
00074
00075 template < typename Op1, typename Op2 >
00076 typename traits::div_result<Op1,Op2>::type
00077 inline operator/(const Op1& op1, const Op2& op2)
00078 {
00079 return typename traits::div_result<Op1,Op2>::type(op1,op2);
00080 }
00081
00082 }
00083
00084
00085 }
00086
00087 #endif // MTL_OPERATORS_INCLUDE