operator_minus.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 template<typename T1>
00024 arma_inline
00025 const eOp<T1, eop_neg>
00026 operator-
00027 (const Base<typename T1::elem_type,T1>& X)
00028 {
00029 arma_extra_debug_sigprint();
00030
00031 return eOp<T1,eop_neg>(X.get_ref());
00032 }
00033
00034
00035
00036
00037 template<typename T1>
00038 arma_inline
00039 const T1&
00040 operator-
00041 (const eOp<T1, eop_neg>& X)
00042 {
00043 arma_extra_debug_sigprint();
00044
00045 return X.m;
00046 }
00047
00048
00049
00050
00051 template<typename T1>
00052 arma_inline
00053 const eOp<T1, eop_scalar_minus_post>
00054 operator-
00055 (
00056 const Base<typename T1::elem_type,T1>& X,
00057 const typename T1::elem_type k
00058 )
00059 {
00060 arma_extra_debug_sigprint();
00061
00062 return eOp<T1, eop_scalar_minus_post>(X.get_ref(), k);
00063 }
00064
00065
00066
00067
00068 template<typename T1>
00069 arma_inline
00070 const eOp<T1, eop_scalar_minus_pre>
00071 operator-
00072 (
00073 const typename T1::elem_type k,
00074 const Base<typename T1::elem_type,T1>& X
00075 )
00076 {
00077 arma_extra_debug_sigprint();
00078
00079 return eOp<T1, eop_scalar_minus_pre>(X.get_ref(), k);
00080 }
00081
00082
00083
00084
00085 template<typename T1, typename T2>
00086 arma_inline
00087 const eGlue<T1, T2, eglue_minus>
00088 operator-
00089 (
00090 const Base<typename T1::elem_type,T1>& X,
00091 const Base<typename T1::elem_type,T2>& Y
00092 )
00093 {
00094 arma_extra_debug_sigprint();
00095
00096 return eGlue<T1, T2, eglue_minus>(X.get_ref(), Y.get_ref());
00097 }
00098
00099
00100
00101
00102 template<typename T1, typename T2>
00103 arma_inline
00104 Mat<typename promote_type<typename T1::elem_type, typename T2::elem_type>::result>
00105 operator-
00106 (
00107 const Base< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T1_result, T1>& X,
00108 const Base< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T2_result, T2>& Y
00109 )
00110 {
00111 arma_extra_debug_sigprint();
00112
00113 typedef typename T1::elem_type eT1;
00114 typedef typename T2::elem_type eT2;
00115
00116 typedef typename promote_type<eT1,eT2>::result out_eT;
00117
00118 promote_type<eT1,eT2>::check();
00119
00120 const Proxy<T1> A(X.get_ref());
00121 const Proxy<T2> B(Y.get_ref());
00122
00123 arma_debug_assert_same_size(A, B, "matrix subtraction");
00124
00125 Mat<out_eT> out(A.n_rows, A.n_cols);
00126
00127 out_eT* out_mem = out.memptr();
00128 const u32 n_elem = out.n_elem;
00129
00130 for(u32 i=0; i<n_elem; ++i)
00131 {
00132 out_mem[i] = upgrade_val<eT1,eT2>::apply(A[i]) - upgrade_val<eT1,eT2>::apply(B[i]);
00133 }
00134
00135 return out;
00136 }
00137
00138
00139
00140