operator_cube_div.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2009 NICTA
00002 // 
00003 // Authors:
00004 // - Conrad Sanderson (conradsand at ieee dot org)
00005 // 
00006 // This file is part of the Armadillo C++ library.
00007 // It is provided without any warranty of fitness
00008 // for any purpose. You can redistribute this file
00009 // and/or modify it under the terms of the GNU
00010 // Lesser General Public License (LGPL) as published
00011 // by the Free Software Foundation, either version 3
00012 // of the License or (at your option) any later version.
00013 // (see http://www.opensource.org/licenses for more info)
00014 
00015 
00016 //! \addtogroup operator_cube_div
00017 //! @{
00018 
00019 
00020 
00021 //! Base / scalar
00022 template<typename T1>
00023 arma_inline
00024 const OpCube<T1, op_scalar_div_post>
00025 operator/
00026 (const BaseCube<typename T1::elem_type,T1>& X, const typename T1::elem_type k)
00027   {
00028   arma_extra_debug_sigprint();
00029   
00030   return OpCube<T1, op_scalar_div_post>(X.get_ref(), k);
00031   }
00032 
00033 
00034 
00035 //! OpCube<mat,op_ones_full> / scalar
00036 template<typename eT>
00037 arma_inline
00038 Cube<eT>
00039 operator/
00040 (const OpCube<Cube<eT>,op_ones_full>& X, const eT k)
00041   {
00042   arma_extra_debug_sigprint();
00043   
00044   Cube<eT> tmp(X.aux_u32_a, X.aux_u32_b, X.aux_u32_c);
00045   tmp.fill( eT(1)/k );
00046   
00047   return tmp;
00048   }
00049 
00050 
00051 
00052 //! scalar / Base
00053 template<typename T1>
00054 arma_inline
00055 const OpCube<T1, op_scalar_div_pre>
00056 operator/
00057 (const typename T1::elem_type k, const BaseCube<typename T1::elem_type,T1>& X)
00058   {
00059   arma_extra_debug_sigprint();
00060   
00061   return OpCube<T1, op_scalar_div_pre>(X.get_ref(), k);
00062   }
00063 
00064 
00065 
00066 //
00067 // element-wise division of Base objects with different element types
00068 //
00069 
00070 
00071 
00072 //! Base / Base
00073 template<typename eT1, typename T1, typename eT2, typename T2>
00074 arma_inline
00075 Cube<typename promote_type<eT1,eT2>::result>
00076 operator/
00077 (const BaseCube<eT1,T1>& X, const BaseCube<eT2,T2>& Y)
00078   {
00079   arma_extra_debug_sigprint();
00080   
00081   promote_type<eT1,eT2>::check();
00082   
00083   const unwrap<T1> tmp1(X.get_ref());
00084   const unwrap<T2> tmp2(Y.get_ref());
00085   
00086   const Cube<eT1>& A = tmp1.M;
00087   const Cube<eT2>& B = tmp2.M;
00088   
00089   Cube< typename promote_type<eT1,eT2>::result > out;
00090   glue_cube_div::apply_mixed(out, A, B);
00091   
00092   return out;
00093   }
00094 
00095 
00096 
00097 //
00098 // element-wise division of Base objects with same element types
00099 //
00100 
00101 
00102 
00103 template<typename T1, typename T2>
00104 arma_inline
00105 const GlueCube<T1, T2, glue_cube_div>
00106 operator/
00107 (const BaseCube<std::complex<double>,T1>& X, const BaseCube<std::complex<double>,T2>& Y)
00108   {
00109   arma_extra_debug_sigprint();
00110   
00111   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00112   }
00113 
00114 
00115 
00116 template<typename T1, typename T2>
00117 arma_inline
00118 const GlueCube<T1, T2, glue_cube_div>
00119 operator/
00120 (const BaseCube<std::complex<float>,T1>& X, const BaseCube<std::complex<float>,T2>& Y)
00121   {
00122   arma_extra_debug_sigprint();
00123   
00124   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00125   }
00126 
00127 
00128 
00129 template<typename T1, typename T2>
00130 arma_inline
00131 const GlueCube<T1, T2, glue_cube_div>
00132 operator/
00133 (const BaseCube<double,T1>& X, const BaseCube<double,T2>& Y)
00134   {
00135   arma_extra_debug_sigprint();
00136   
00137   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00138   }
00139 
00140 
00141 
00142 template<typename T1, typename T2>
00143 arma_inline
00144 const GlueCube<T1, T2, glue_cube_div>
00145 operator/
00146 (const BaseCube<float,T1>& X, const BaseCube<float,T2>& Y)
00147   {
00148   arma_extra_debug_sigprint();
00149   
00150   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00151   }
00152 
00153 
00154 
00155 template<typename T1, typename T2>
00156 arma_inline
00157 const GlueCube<T1, T2, glue_cube_div>
00158 operator/
00159 (const BaseCube<s32,T1>& X, const BaseCube<s32,T2>& Y)
00160   {
00161   arma_extra_debug_sigprint();
00162   
00163   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00164   }
00165 
00166 
00167 
00168 template<typename T1, typename T2>
00169 arma_inline
00170 const GlueCube<T1, T2, glue_cube_div>
00171 operator/
00172 (const BaseCube<u32,T1>& X, const BaseCube<u32,T2>& Y)
00173   {
00174   arma_extra_debug_sigprint();
00175   
00176   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00177   }
00178 
00179 
00180 
00181 template<typename T1, typename T2>
00182 arma_inline
00183 const GlueCube<T1, T2, glue_cube_div>
00184 operator/
00185 (const BaseCube<s16,T1>& X, const BaseCube<s16,T2>& Y)
00186   {
00187   arma_extra_debug_sigprint();
00188   
00189   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00190   }
00191 
00192 
00193 
00194 template<typename T1, typename T2>
00195 arma_inline
00196 const GlueCube<T1, T2, glue_cube_div>
00197 operator/
00198 (const BaseCube<u16,T1>& X, const BaseCube<u16,T2>& Y)
00199   {
00200   arma_extra_debug_sigprint();
00201   
00202   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00203   }
00204 
00205 
00206 
00207 template<typename T1, typename T2>
00208 arma_inline
00209 const GlueCube<T1, T2, glue_cube_div>
00210 operator/
00211 (const BaseCube<s8,T1>& X, const BaseCube<s8,T2>& Y)
00212   {
00213   arma_extra_debug_sigprint();
00214   
00215   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00216   }
00217 
00218 
00219 
00220 template<typename T1, typename T2>
00221 arma_inline
00222 const GlueCube<T1, T2, glue_cube_div>
00223 operator/
00224 (const BaseCube<u8,T1>& X, const BaseCube<u8,T2>& Y)
00225   {
00226   arma_extra_debug_sigprint();
00227   
00228   return GlueCube<T1, T2, glue_cube_div>(X.get_ref(), Y.get_ref());
00229   }
00230 
00231 
00232 
00233 //! @}