operator_cube_schur.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_schur
00017 //! @{
00018 
00019 
00020 // operator %, which we define it to do a schur product (element-wise multiplication)
00021 
00022 
00023 //! Base % Base
00024 template<typename T1, typename T2>
00025 arma_inline
00026 const GlueCube<T1, T2, glue_cube_schur>
00027 operator%
00028 (const BaseCube<typename T1::elem_type,T1>& X, const BaseCube<typename T1::elem_type,T2>& Y)
00029   {
00030   arma_extra_debug_sigprint();
00031   
00032   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00033   }
00034 
00035 
00036 
00037 //
00038 // schur product of Base objects with different element types
00039 //
00040 
00041 
00042 
00043 //! Base % Base
00044 template<typename eT1, typename T1, typename eT2, typename T2>
00045 arma_inline
00046 Cube<typename promote_type<eT1,eT2>::result>
00047 operator%
00048 (const BaseCube<eT1,T1>& X, const BaseCube<eT2,T2>& Y)
00049   {
00050   arma_extra_debug_sigprint();
00051   
00052   promote_type<eT1,eT2>::check();
00053   
00054   const unwrap_cube<T1> tmp1(X.get_ref());
00055   const unwrap_cube<T2> tmp2(Y.get_ref());
00056   
00057   const Cube<eT1>& A = tmp1.M;
00058   const Cube<eT2>& B = tmp2.M;
00059   
00060   Cube< typename promote_type<eT1,eT2>::result > out;
00061   glue_cube_schur::apply_mixed(out, A, B);
00062   
00063   return out;
00064   }
00065 
00066 
00067 
00068 //
00069 // schur product of Base objects with same element types
00070 //
00071 
00072 
00073 
00074 template<typename T1, typename T2>
00075 arma_inline
00076 const GlueCube<T1, T2, glue_cube_schur>
00077 operator%
00078 (const BaseCube<std::complex<double>,T1>& X, const BaseCube<std::complex<double>,T2>& Y)
00079   {
00080   arma_extra_debug_sigprint();
00081   
00082   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00083   }
00084 
00085 
00086 
00087 template<typename T1, typename T2>
00088 arma_inline
00089 const GlueCube<T1, T2, glue_cube_schur>
00090 operator%
00091 (const BaseCube<std::complex<float>,T1>& X, const BaseCube<std::complex<float>,T2>& Y)
00092   {
00093   arma_extra_debug_sigprint();
00094   
00095   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00096   }
00097 
00098 
00099 
00100 template<typename T1, typename T2>
00101 arma_inline
00102 const GlueCube<T1, T2, glue_cube_schur>
00103 operator%
00104 (const BaseCube<double,T1>& X, const BaseCube<double,T2>& Y)
00105   {
00106   arma_extra_debug_sigprint();
00107   
00108   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00109   }
00110 
00111 
00112 
00113 template<typename T1, typename T2>
00114 arma_inline
00115 const GlueCube<T1, T2, glue_cube_schur>
00116 operator%
00117 (const BaseCube<float,T1>& X, const BaseCube<float,T2>& Y)
00118   {
00119   arma_extra_debug_sigprint();
00120   
00121   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00122   }
00123 
00124 
00125 
00126 template<typename T1, typename T2>
00127 arma_inline
00128 const GlueCube<T1, T2, glue_cube_schur>
00129 operator%
00130 (const BaseCube<s32,T1>& X, const BaseCube<s32,T2>& Y)
00131   {
00132   arma_extra_debug_sigprint();
00133   
00134   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00135   }
00136 
00137 
00138 
00139 template<typename T1, typename T2>
00140 arma_inline
00141 const GlueCube<T1, T2, glue_cube_schur>
00142 operator%
00143 (const BaseCube<u32,T1>& X, const BaseCube<u32,T2>& Y)
00144   {
00145   arma_extra_debug_sigprint();
00146   
00147   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00148   }
00149 
00150 
00151 
00152 template<typename T1, typename T2>
00153 arma_inline
00154 const GlueCube<T1, T2, glue_cube_schur>
00155 operator%
00156 (const BaseCube<s16,T1>& X, const BaseCube<s16,T2>& Y)
00157   {
00158   arma_extra_debug_sigprint();
00159   
00160   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00161   }
00162 
00163 
00164 
00165 template<typename T1, typename T2>
00166 arma_inline
00167 const GlueCube<T1, T2, glue_cube_schur>
00168 operator%
00169 (const BaseCube<u16,T1>& X, const BaseCube<u16,T2>& Y)
00170   {
00171   arma_extra_debug_sigprint();
00172   
00173   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00174   }
00175 
00176 
00177 
00178 template<typename T1, typename T2>
00179 arma_inline
00180 const GlueCube<T1, T2, glue_cube_schur>
00181 operator%
00182 (const BaseCube<s8,T1>& X, const BaseCube<s8,T2>& Y)
00183   {
00184   arma_extra_debug_sigprint();
00185   
00186   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00187   }
00188 
00189 
00190 
00191 template<typename T1, typename T2>
00192 arma_inline
00193 const GlueCube<T1, T2, glue_cube_schur>
00194 operator%
00195 (const BaseCube<u8,T1>& X, const BaseCube<u8,T2>& Y)
00196   {
00197   arma_extra_debug_sigprint();
00198   
00199   return GlueCube<T1, T2, glue_cube_schur>(X.get_ref(), Y.get_ref());
00200   }
00201 
00202 
00203 
00204 //! @}