diff --git a/include/armadillo_bits/op_diagmat_bones.hpp b/include/armadillo_bits/op_diagmat_bones.hpp index 91ded0bc..e072a18c 100644 --- a/include/armadillo_bits/op_diagmat_bones.hpp +++ b/include/armadillo_bits/op_diagmat_bones.hpp @@ -27,6 +27,9 @@ struct op_diagmat template inline static void apply(Mat& out, const Op& X); + template + inline static void apply(Mat_noalias& out, const Op& X); + template inline static void apply(Mat& out, const Proxy& P); @@ -48,6 +51,9 @@ struct op_diagmat2 template inline static void apply(Mat& out, const Op& X); + template + inline static void apply(Mat_noalias& out, const Op& X); + template inline static void apply(Mat& out, const Proxy& P, const uword row_offset, const uword col_offset); }; diff --git a/include/armadillo_bits/op_diagmat_meat.hpp b/include/armadillo_bits/op_diagmat_meat.hpp index 1dd0e58a..5f59f84b 100644 --- a/include/armadillo_bits/op_diagmat_meat.hpp +++ b/include/armadillo_bits/op_diagmat_meat.hpp @@ -104,6 +104,20 @@ op_diagmat::apply(Mat& out, const Op& X) +template +inline +void +op_diagmat::apply(Mat_noalias& out, const Op& X) + { + arma_debug_sigprint(); + + const Proxy P(X.m); + + op_diagmat::apply(out, P); + } + + + template inline void @@ -701,6 +715,23 @@ op_diagmat2::apply(Mat& out, const Op& +template +inline +void +op_diagmat2::apply(Mat_noalias& out, const Op& X) + { + arma_debug_sigprint(); + + const uword row_offset = X.aux_uword_a; + const uword col_offset = X.aux_uword_b; + + const Proxy P(X.m); + + op_diagmat2::apply(out, P, row_offset, col_offset); + } + + + template inline void diff --git a/include/armadillo_bits/op_diagvec_bones.hpp b/include/armadillo_bits/op_diagvec_bones.hpp index 64bd7cb1..68461681 100644 --- a/include/armadillo_bits/op_diagvec_bones.hpp +++ b/include/armadillo_bits/op_diagvec_bones.hpp @@ -27,6 +27,9 @@ struct op_diagvec template inline static void apply(Mat& out, const Op& X); + template + inline static void apply(Mat_noalias& out, const Op& X); + template inline static void apply_proxy(Mat& out, const Proxy& P); @@ -45,6 +48,9 @@ struct op_diagvec2 template inline static void apply(Mat& out, const Op& X); + template + inline static void apply(Mat_noalias& out, const Op& X); + template inline static void apply_proxy(Mat& out, const Proxy& P, const uword row_offset, const uword col_offset); }; diff --git a/include/armadillo_bits/op_diagvec_meat.hpp b/include/armadillo_bits/op_diagvec_meat.hpp index 42117a3e..c4ff93b9 100644 --- a/include/armadillo_bits/op_diagvec_meat.hpp +++ b/include/armadillo_bits/op_diagvec_meat.hpp @@ -48,6 +48,20 @@ op_diagvec::apply(Mat& out, const Op& X) +template +inline +void +op_diagvec::apply(Mat_noalias& out, const Op& X) + { + arma_debug_sigprint(); + + const Proxy P(X.m); + + op_diagvec::apply_proxy(out, P); + } + + + template inline void @@ -491,6 +505,26 @@ op_diagvec2::apply(Mat& out, const Op& +template +inline +void +op_diagvec2::apply(Mat_noalias& out, const Op& X) + { + arma_debug_sigprint(); + + const uword a = X.aux_uword_a; + const uword b = X.aux_uword_b; + + const uword row_offset = (b > 0) ? a : 0; + const uword col_offset = (b == 0) ? a : 0; + + const Proxy P(X.m); + + op_diagvec2::apply_proxy(out, P, row_offset, col_offset); + } + + + template inline void