diff --git a/include/armadillo_bits/op_nonzeros_bones.hpp b/include/armadillo_bits/op_nonzeros_bones.hpp index db5616fb..36722088 100644 --- a/include/armadillo_bits/op_nonzeros_bones.hpp +++ b/include/armadillo_bits/op_nonzeros_bones.hpp @@ -32,6 +32,9 @@ struct op_nonzeros template static inline void apply(Mat& out, const Op& X); + + template + static inline void apply(Mat_noalias& out, const Op& X); }; diff --git a/include/armadillo_bits/op_nonzeros_meat.hpp b/include/armadillo_bits/op_nonzeros_meat.hpp index bb4deeea..3360ad2e 100644 --- a/include/armadillo_bits/op_nonzeros_meat.hpp +++ b/include/armadillo_bits/op_nonzeros_meat.hpp @@ -100,4 +100,20 @@ op_nonzeros::apply(Mat& out, const Op& +template +inline +void +op_nonzeros::apply(Mat_noalias& out, const Op& X) + { + arma_debug_sigprint(); + + const Proxy P(X.m); + + if(P.get_n_elem() == 0) { out.set_size(0,1); return; } + + op_nonzeros::apply_noalias(out, P); + } + + + //! @} diff --git a/include/armadillo_bits/spglue_join_bones.hpp b/include/armadillo_bits/spglue_join_bones.hpp index ab3e961a..2dec57a2 100644 --- a/include/armadillo_bits/spglue_join_bones.hpp +++ b/include/armadillo_bits/spglue_join_bones.hpp @@ -34,6 +34,9 @@ struct spglue_join_cols template inline static void apply(SpMat& out, const SpGlue& X); + template + inline static void apply(SpMat_noalias& out, const SpGlue& X); + template inline static void apply_noalias(SpMat& out, const SpMat& A, const SpMat& B); @@ -59,6 +62,9 @@ struct spglue_join_rows template inline static void apply(SpMat& out, const SpGlue& X); + template + inline static void apply(SpMat_noalias& out, const SpGlue& X); + template inline static void apply_noalias(SpMat& out, const SpMat& A, const SpMat& B); diff --git a/include/armadillo_bits/spglue_join_meat.hpp b/include/armadillo_bits/spglue_join_meat.hpp index 31808eb7..f30bbdf7 100644 --- a/include/armadillo_bits/spglue_join_meat.hpp +++ b/include/armadillo_bits/spglue_join_meat.hpp @@ -49,6 +49,21 @@ spglue_join_cols::apply(SpMat& out, const SpGlue +inline +void +spglue_join_cols::apply(SpMat_noalias& out, const SpGlue& X) + { + arma_debug_sigprint(); + + const unwrap_spmat UA(X.A); + const unwrap_spmat UB(X.B); + + spglue_join_cols::apply_noalias(out, UA.M, UB.M); + } + + + template inline void @@ -177,6 +192,10 @@ spglue_join_cols::apply(SpMat& out, const SpBase& A_expr, const SpBas +// + + + template inline void @@ -205,6 +224,21 @@ spglue_join_rows::apply(SpMat& out, const SpGlue +inline +void +spglue_join_rows::apply(SpMat_noalias& out, const SpGlue& X) + { + arma_debug_sigprint(); + + const unwrap_spmat UA(X.A); + const unwrap_spmat UB(X.B); + + spglue_join_rows::apply_noalias(out, UA.M, UB.M); + } + + + template inline void