00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 class glue_times
00022 {
00023 public:
00024
00025
00026 template<typename T1, typename T2>
00027 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<T1,T2,glue_times>& X);
00028
00029
00030 template<typename T1>
00031 inline static void apply_inplace(Mat<typename T1::elem_type>& out, const T1& X);
00032
00033
00034 template<typename eT1, typename eT2>
00035 inline static void apply_mixed(Mat<typename promote_type<eT1,eT2>::result>& out, const Mat<eT1>& X, const Mat<eT2>& Y);
00036
00037
00038 template<typename eT>
00039 arma_inline static u32 mul_storage_cost(const Mat<eT>& X, const Mat<eT>& Y);
00040
00041 template<typename eT>
00042 inline static void apply_noalias(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B);
00043
00044 template<typename eT>
00045 inline static void apply(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B);
00046
00047 template<typename eT>
00048 inline static void apply(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B, const Mat<eT>& C);
00049
00050 template<typename eT>
00051 inline static eT direct_rowvec_mat_colvec(const eT* A_mem, const Mat<eT>& B, const eT* C_mem);
00052
00053 template<typename eT>
00054 inline static eT direct_rowvec_diagmat_colvec(const eT* A_mem, const Mat<eT>& B, const eT* C_mem);
00055
00056 template<typename eT>
00057 inline static eT direct_rowvec_invdiagmat_colvec(const eT* A_mem, const Mat<eT>& B, const eT* C_mem);
00058
00059 template<typename eT>
00060 inline static eT direct_rowvec_invdiagvec_colvec(const eT* A_mem, const Mat<eT>& B, const eT* C_mem);
00061
00062
00063 #if defined(ARMA_GOOD_COMPILER)
00064
00065
00066 template<typename eT>
00067 inline static void apply(Mat<eT>& out, const Glue<Mat<eT>,Mat<eT>,glue_times>& X);
00068
00069 template<typename eT>
00070 inline static void apply(Mat<eT>& out, const Glue< Glue<Mat<eT>,Mat<eT>, glue_times>, Mat<eT>, glue_times>& X);
00071
00072 template<typename T1, typename T2>
00073 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<T1,Op<T2,op_trans>,glue_times >& X);
00074
00075 template<typename T1, typename T2>
00076 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<Op<T1,op_trans>,T2,glue_times>& X);
00077
00078 template<typename T1, typename T2>
00079 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<Op<T1,op_trans>,Op<T2,op_trans>,glue_times>& X);
00080
00081 template<typename T1, typename T2>
00082 inline static void apply(Mat<typename T1::elem_type>& out, const Glue< Op<T1, op_neg>, T2, glue_times>& X);
00083
00084
00085 template<typename T1, typename T2>
00086 inline static void apply_inplace(Mat<typename T1::elem_type>& out, const Glue<T1, T2, glue_times>& X);
00087
00088 #endif
00089
00090 };
00091
00092
00093
00094 class glue_times_diag
00095 {
00096 public:
00097
00098 template<typename T1, typename T2>
00099 inline static void apply(Mat<typename T1::elem_type>& out, const T1& A, const Op<T2,op_diagmat>& B);
00100
00101 template<typename T1, typename T2>
00102 inline static void apply(Mat<typename T1::elem_type>& out, const Op<T1,op_diagmat>& A, const T2& B);
00103
00104 template<typename T1, typename T2>
00105 inline static void apply(Mat<typename T1::elem_type>& out, const Op<T1,op_diagmat>& A, const Op<T2,op_diagmat>& B);
00106
00107
00108 template<typename T1, typename T2>
00109 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<T1, Op<T2,op_diagmat>, glue_times_diag>& X);
00110
00111 template<typename T1, typename T2>
00112 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<Op<T1,op_diagmat>, T2, glue_times_diag>& X);
00113
00114 template<typename T1, typename T2>
00115 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<Op<T1,op_diagmat>, Op<T2,op_diagmat>, glue_times_diag>& X);
00116
00117 };
00118
00119
00120
00121 class glue_times_vec
00122 {
00123 public:
00124
00125 template<typename T1, typename T2>
00126 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<T1, T2, glue_times_vec>& X);
00127
00128
00129 template<typename eT>
00130 inline static void mul_col_row(Mat<eT>& out, const eT* A_mem, const eT* B_mem);
00131
00132 template<typename eT>
00133 inline static void mul_col_row_inplace_add(Mat<eT>& out, const eT* A_mem, const eT* B_mem);
00134
00135
00136 #if defined(ARMA_GOOD_COMPILER)
00137
00138
00139 template<typename eT>
00140 inline static void apply(Mat<eT>& out, const Glue<Col<eT>, Row<eT>, glue_times_vec>& X);
00141
00142 template<typename eT>
00143 inline static void apply(Mat<eT>& out, const Glue< Op<Row<eT>, op_trans>, Row<eT>, glue_times_vec>& X);
00144
00145 template<typename eT>
00146 inline static void apply(Mat<eT>& out, const Glue< Col<eT>, Op<Col<eT>, op_trans>, glue_times_vec>& X);
00147
00148 template<typename T1>
00149 inline static void apply(Mat<typename T1::elem_type>& out, const Glue<Op<T1, op_trans>, Col<typename T1::elem_type>, glue_times_vec>& X);
00150
00151
00152 #endif
00153
00154 };
00155
00156
00157
00158