From c6f4af01d804d54aaa76d2de98ca7575df7c557e Mon Sep 17 00:00:00 2001 From: conrad Date: Mon, 29 Jun 2026 23:12:20 +1000 Subject: [PATCH] more efficient handling of aliasing --- include/armadillo_bits/spop_diagmat_bones.hpp | 7 ++++- include/armadillo_bits/spop_diagmat_meat.hpp | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/armadillo_bits/spop_diagmat_bones.hpp b/include/armadillo_bits/spop_diagmat_bones.hpp index f19a1cda..fb61b223 100644 --- a/include/armadillo_bits/spop_diagmat_bones.hpp +++ b/include/armadillo_bits/spop_diagmat_bones.hpp @@ -26,6 +26,9 @@ struct spop_diagmat template inline static void apply(SpMat& out, const SpOp& in); + template + inline static void apply(SpMat_noalias& out, const SpOp& in); + template inline static void apply_noalias(SpMat& out, const SpBase& expr); @@ -40,7 +43,6 @@ struct spop_diagmat template inline static void apply_noalias(SpMat& out, const SpGlue& expr); - }; @@ -51,6 +53,9 @@ struct spop_diagmat2 template inline static void apply(SpMat& out, const SpOp& in); + template + inline static void apply(SpMat_noalias& out, const SpOp& in); + template inline static void apply_noalias(SpMat& out, const SpMat& X, const uword row_offset, const uword col_offset); }; diff --git a/include/armadillo_bits/spop_diagmat_meat.hpp b/include/armadillo_bits/spop_diagmat_meat.hpp index 19503b8c..1328192e 100644 --- a/include/armadillo_bits/spop_diagmat_meat.hpp +++ b/include/armadillo_bits/spop_diagmat_meat.hpp @@ -46,6 +46,18 @@ spop_diagmat::apply(SpMat& out, const SpOp +inline +void +spop_diagmat::apply(SpMat_noalias& out, const SpOp& in) + { + arma_debug_sigprint(); + + spop_diagmat::apply_noalias(out, in.m); + } + + + template inline void @@ -374,6 +386,21 @@ spop_diagmat2::apply(SpMat& out, const SpOp +inline +void +spop_diagmat2::apply(SpMat_noalias& out, const SpOp& 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 inline void