operator_plus.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 Base<typename T1::elem_type,T1>&
00026 operator+
00027 (const Base<typename T1::elem_type,T1>& X)
00028 {
00029 arma_extra_debug_sigprint();
00030
00031 return X;
00032 }
00033
00034
00035
00036
00037 template<typename T1>
00038 arma_inline
00039 const eOp<T1, eop_scalar_plus>
00040 operator+
00041 (const Base<typename T1::elem_type,T1>& X, const typename T1::elem_type k)
00042 {
00043 arma_extra_debug_sigprint();
00044
00045 return eOp<T1, eop_scalar_plus>(X.get_ref(), k);
00046 }
00047
00048
00049
00050
00051 template<typename T1>
00052 arma_inline
00053 const eOp<T1, eop_scalar_plus>
00054 operator+
00055 (const typename T1::elem_type k, const Base<typename T1::elem_type,T1>& X)
00056 {
00057 arma_extra_debug_sigprint();
00058
00059 return eOp<T1, eop_scalar_plus>(X.get_ref(), k);
00060 }
00061
00062
00063
00064
00065 template<typename T1, typename T2>
00066 arma_inline
00067 const eGlue<T1, T2, eglue_plus>
00068 operator+
00069 (
00070 const Base<typename T1::elem_type,T1>& X,
00071 const Base<typename T1::elem_type,T2>& Y
00072 )
00073 {
00074 arma_extra_debug_sigprint();
00075
00076 return eGlue<T1, T2, eglue_plus>(X.get_ref(), Y.get_ref());
00077 }
00078
00079
00080
00081
00082 template<typename T1, typename T2>
00083 arma_inline
00084 Mat<typename promote_type<typename T1::elem_type, typename T2::elem_type>::result>
00085 operator+
00086 (
00087 const Base< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T1_result, T1>& X,
00088 const Base< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T2_result, T2>& Y
00089 )
00090 {
00091 arma_extra_debug_sigprint();
00092
00093 typedef typename T1::elem_type eT1;
00094 typedef typename T2::elem_type eT2;
00095
00096 typedef typename promote_type<eT1,eT2>::result out_eT;
00097
00098 promote_type<eT1,eT2>::check();
00099
00100 const Proxy<T1> A(X.get_ref());
00101 const Proxy<T2> B(Y.get_ref());
00102
00103 arma_debug_assert_same_size(A, B, "matrix addition");
00104
00105 Mat<out_eT> out(A.n_rows, A.n_cols);
00106
00107 out_eT* out_mem = out.memptr();
00108 const u32 n_elem = out.n_elem;
00109
00110 for(u32 i=0; i<n_elem; ++i)
00111 {
00112 out_mem[i] = upgrade_val<eT1,eT2>::apply(A[i]) + upgrade_val<eT1,eT2>::apply(B[i]);
00113 }
00114
00115 return out;
00116 }
00117
00118
00119
00120