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