00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MTL_MAT_MAT_MINUS_EXPR_INCLUDE
00013 #define MTL_MAT_MAT_MINUS_EXPR_INCLUDE
00014
00015
00016 #include <boost/numeric/mtl/matrix/mat_mat_op_expr.hpp>
00017 #include <boost/numeric/mtl/operation/sfunctor.hpp>
00018
00019 namespace mtl {namespace matrix {
00020
00021 template <typename E1, typename E2>
00022 struct mat_mat_minus_expr
00023 : public mat_mat_op_expr< E1, E2, mtl::sfunctor::minus<typename E1::value_type, typename E2::value_type> >,
00024 public mat_expr< mat_mat_minus_expr<E1, E2> >
00025 {
00026 typedef mat_mat_op_expr< E1, E2, mtl::sfunctor::minus<typename E1::value_type, typename E2::value_type> > op_base;
00027 typedef mat_expr< mat_mat_minus_expr<E1, E2> > crtp_base;
00028 typedef E1 first_argument_type ;
00029 typedef E2 second_argument_type ;
00030
00031 mat_mat_minus_expr( E1 const& v1, E2 const& v2 )
00032 : op_base( v1, v2 ), crtp_base(*this), first(v1), second(v2)
00033 {}
00034
00035 first_argument_type const& first ;
00036 second_argument_type const& second ;
00037 };
00038
00039
00040 }}
00041
00042
00043 #endif // MTL_MAT_MAT_MINUS_EXPR_INCLUDE