operator_cube_div.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2010 NICTA and the authors listed below
00002 // http://nicta.com.au
00003 // 
00004 // Authors:
00005 // - Conrad Sanderson (conradsand at ieee dot org)
00006 // 
00007 // This file is part of the Armadillo C++ library.
00008 // It is provided without any warranty of fitness
00009 // for any purpose. You can redistribute this file
00010 // and/or modify it under the terms of the GNU
00011 // Lesser General Public License (LGPL) as published
00012 // by the Free Software Foundation, either version 3
00013 // of the License or (at your option) any later version.
00014 // (see http://www.opensource.org/licenses for more info)
00015 
00016 
00017 //! \addtogroup operator_cube_div
00018 //! @{
00019 
00020   
00021 
00022 //! BaseCube / scalar
00023 template<typename T1>
00024 arma_inline
00025 const eOpCube<T1, eop_cube_scalar_div_post>
00026 operator/
00027   (
00028   const BaseCube<typename T1::elem_type,T1>& X,
00029   const typename T1::elem_type               k
00030   )
00031   {
00032   arma_extra_debug_sigprint();
00033   
00034   return eOpCube<T1, eop_cube_scalar_div_post>(X.get_ref(), k);
00035   }
00036 
00037 
00038 
00039 //! scalar / BaseCube
00040 template<typename T1>
00041 arma_inline
00042 const eOpCube<T1, eop_cube_scalar_div_pre>
00043 operator/
00044   (
00045   const typename T1::elem_type               k,
00046   const BaseCube<typename T1::elem_type,T1>& X
00047   )
00048   {
00049   arma_extra_debug_sigprint();
00050   
00051   return eOpCube<T1, eop_cube_scalar_div_pre>(X.get_ref(), k);
00052   }
00053 
00054 
00055 
00056 //! element-wise division of BaseCube objects with same element type
00057 template<typename T1, typename T2>
00058 arma_inline
00059 const eGlueCube<T1, T2, eglue_cube_div>
00060 operator/
00061   (
00062   const BaseCube<typename T1::elem_type,T1>& X,
00063   const BaseCube<typename T1::elem_type,T2>& Y
00064   )
00065   {
00066   arma_extra_debug_sigprint();
00067   
00068   return eGlueCube<T1, T2, eglue_cube_div>(X.get_ref(), Y.get_ref());
00069   }
00070 
00071 
00072 
00073 //! element-wise division of Base objects with different element types
00074 template<typename T1, typename T2>
00075 arma_inline
00076 Cube<typename promote_type<typename T1::elem_type, typename T2::elem_type>::result>
00077 operator/
00078   (
00079   const BaseCube< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T1_result, T1>& X,
00080   const BaseCube< typename force_different_type<typename T1::elem_type, typename T2::elem_type>::T2_result, T2>& Y
00081   )
00082   {
00083   arma_extra_debug_sigprint();
00084   
00085   typedef typename T1::elem_type eT1;
00086   typedef typename T2::elem_type eT2;
00087   
00088   typedef typename promote_type<eT1,eT2>::result out_eT;
00089   
00090   promote_type<eT1,eT2>::check();
00091   
00092   const ProxyCube<T1> A(X.get_ref());
00093   const ProxyCube<T2> B(Y.get_ref());
00094   
00095   arma_debug_assert_same_size(A, B, "element-wise cube division");
00096   
00097   Cube<out_eT> out(A.n_rows, A.n_cols, A.n_slices);
00098 
00099         out_eT* out_mem = out.memptr();
00100   const u32     n_elem  = out.n_elem;
00101   
00102   for(u32 i=0; i<n_elem; ++i)
00103     {
00104     out_mem[i] = upgrade_val<eT1,eT2>::apply(A[i]) / upgrade_val<eT1,eT2>::apply(B[i]);
00105     }
00106   
00107   return out;
00108   }
00109 
00110 
00111 
00112 //! @}