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>
00066 arma_inline
00067 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_plus>
00068 operator+
00069 (
00070 const Base<typename T1::pod_type, T1>& X,
00071 const std::complex<typename T1::pod_type>& k
00072 )
00073 {
00074 arma_extra_debug_sigprint();
00075
00076 return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_plus>('j', X.get_ref(), k);
00077 }
00078
00079
00080
00081
00082 template<typename T1>
00083 arma_inline
00084 const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_plus>
00085 operator+
00086 (
00087 const std::complex<typename T1::pod_type>& k,
00088 const Base<typename T1::pod_type, T1>& X
00089 )
00090 {
00091 arma_extra_debug_sigprint();
00092
00093 return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar_plus>('j', X.get_ref(), k);
00094 }
00095
00096
00097
00098
00099 template<typename T1, typename T2>
00100 arma_inline
00101 const eGlue<T1, T2, eglue_plus>
00102 operator+
00103 (
00104 const Base<typename T1::elem_type,T1>& X,
00105 const Base<typename T1::elem_type,T2>& Y
00106 )
00107 {
00108 arma_extra_debug_sigprint();
00109
00110 return eGlue<T1, T2, eglue_plus>(X.get_ref(), Y.get_ref());
00111 }
00112
00113
00114
00115
00116 template<typename T1, typename T2>
00117 inline
00118 const mtGlue<typename promote_type<typename T1::elem_type, typename T2::elem_type>::result, T1, T2, glue_mixed_plus>
00119 operator+
00120 (
00121 const Base< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T1_result, T1>& X,
00122 const Base< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T2_result, T2>& Y
00123 )
00124 {
00125 arma_extra_debug_sigprint();
00126
00127 typedef typename T1::elem_type eT1;
00128 typedef typename T2::elem_type eT2;
00129
00130 typedef typename promote_type<eT1,eT2>::result out_eT;
00131
00132 promote_type<eT1,eT2>::check();
00133
00134 return mtGlue<out_eT, T1, T2, glue_mixed_plus>( X.get_ref(), Y.get_ref() );
00135 }
00136
00137
00138
00139