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