avoid unnecessary alias checks

This commit is contained in:
conrad
2025-10-10 23:48:48 +10:00
parent 1d5981c084
commit 6fea1054d4
4 changed files with 46 additions and 0 deletions
@@ -27,6 +27,9 @@ struct op_stddev
template<typename T1>
inline static void apply(Mat<typename T1::pod_type>& out, const mtOp<typename T1::pod_type, T1, op_stddev>& in);
template<typename T1>
inline static void apply(Mat_noalias<typename T1::pod_type>& out, const mtOp<typename T1::pod_type, T1, op_stddev>& in);
template<typename in_eT>
inline static void apply_noalias(Mat<typename get_pod_type<in_eT>::result>& out, const Mat<in_eT>& X, const uword norm_type, const uword dim);
+20
View File
@@ -54,6 +54,26 @@ op_stddev::apply(Mat<typename T1::pod_type>& out, const mtOp<typename T1::pod_ty
template<typename T1>
inline
void
op_stddev::apply(Mat_noalias<typename T1::pod_type>& out, const mtOp<typename T1::pod_type, T1, op_stddev>& in)
{
arma_debug_sigprint();
const uword norm_type = in.aux_uword_a;
const uword dim = in.aux_uword_b;
arma_conform_check( (norm_type > 1), "stddev(): parameter 'norm_type' must be 0 or 1" );
arma_conform_check( (dim > 1), "stddev(): parameter 'dim' must be 0 or 1" );
const quasi_unwrap<T1> U(in.m);
op_stddev::apply_noalias(out, U.M, norm_type, dim);
}
template<typename in_eT>
inline
void
+3
View File
@@ -27,6 +27,9 @@ struct op_var
template<typename T1>
inline static void apply(Mat<typename T1::pod_type>& out, const mtOp<typename T1::pod_type, T1, op_var>& in);
template<typename T1>
inline static void apply(Mat_noalias<typename T1::pod_type>& out, const mtOp<typename T1::pod_type, T1, op_var>& in);
template<typename in_eT>
inline static void apply_noalias(Mat<typename get_pod_type<in_eT>::result>& out, const Mat<in_eT>& X, const uword norm_type, const uword dim);
+20
View File
@@ -54,6 +54,26 @@ op_var::apply(Mat<typename T1::pod_type>& out, const mtOp<typename T1::pod_type,
template<typename T1>
inline
void
op_var::apply(Mat_noalias<typename T1::pod_type>& out, const mtOp<typename T1::pod_type, T1, op_var>& in)
{
arma_debug_sigprint();
const uword norm_type = in.aux_uword_a;
const uword dim = in.aux_uword_b;
arma_conform_check( (norm_type > 1), "var(): parameter 'norm_type' must be 0 or 1" );
arma_conform_check( (dim > 1), "var(): parameter 'dim' must be 0 or 1" );
const quasi_unwrap<T1> U(in.m);
op_var::apply_noalias(out, U.M, norm_type, dim);
}
template<typename in_eT>
inline
void