more efficient handling of aliasing
This commit is contained in:
@@ -26,6 +26,9 @@ struct spop_diagmat
|
||||
template<typename T1>
|
||||
inline static void apply(SpMat<typename T1::elem_type>& out, const SpOp<T1, spop_diagmat>& in);
|
||||
|
||||
template<typename T1>
|
||||
inline static void apply(SpMat_noalias<typename T1::elem_type>& out, const SpOp<T1, spop_diagmat>& in);
|
||||
|
||||
template<typename T1>
|
||||
inline static void apply_noalias(SpMat<typename T1::elem_type>& out, const SpBase<typename T1::elem_type, T1>& expr);
|
||||
|
||||
@@ -40,7 +43,6 @@ struct spop_diagmat
|
||||
|
||||
template<typename T1, typename T2>
|
||||
inline static void apply_noalias(SpMat<typename T1::elem_type>& out, const SpGlue<T1,T2,spglue_times>& expr);
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -51,6 +53,9 @@ struct spop_diagmat2
|
||||
template<typename T1>
|
||||
inline static void apply(SpMat<typename T1::elem_type>& out, const SpOp<T1, spop_diagmat2>& in);
|
||||
|
||||
template<typename T1>
|
||||
inline static void apply(SpMat_noalias<typename T1::elem_type>& out, const SpOp<T1, spop_diagmat2>& in);
|
||||
|
||||
template<typename eT>
|
||||
inline static void apply_noalias(SpMat<eT>& out, const SpMat<eT>& X, const uword row_offset, const uword col_offset);
|
||||
};
|
||||
|
||||
@@ -46,6 +46,18 @@ spop_diagmat::apply(SpMat<typename T1::elem_type>& out, const SpOp<T1, spop_diag
|
||||
|
||||
|
||||
|
||||
template<typename T1>
|
||||
inline
|
||||
void
|
||||
spop_diagmat::apply(SpMat_noalias<typename T1::elem_type>& out, const SpOp<T1, spop_diagmat>& in)
|
||||
{
|
||||
arma_debug_sigprint();
|
||||
|
||||
spop_diagmat::apply_noalias(out, in.m);
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<typename T1>
|
||||
inline
|
||||
void
|
||||
@@ -374,6 +386,21 @@ spop_diagmat2::apply(SpMat<typename T1::elem_type>& out, const SpOp<T1, spop_dia
|
||||
|
||||
|
||||
|
||||
template<typename T1>
|
||||
inline
|
||||
void
|
||||
spop_diagmat2::apply(SpMat_noalias<typename T1::elem_type>& out, const SpOp<T1, spop_diagmat2>& in)
|
||||
{
|
||||
arma_debug_sigprint();
|
||||
|
||||
const uword row_offset = in.aux_uword_a;
|
||||
const uword col_offset = in.aux_uword_b;
|
||||
|
||||
spop_diagmat2::apply_noalias(out, in.m, row_offset, col_offset);
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<typename eT>
|
||||
inline
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user