diff --git a/include/boost/numeric/ublas/banded.hpp b/include/boost/numeric/ublas/banded.hpp index 8d26c3e6..45ece6c6 100644 --- a/include/boost/numeric/ublas/banded.hpp +++ b/include/boost/numeric/ublas/banded.hpp @@ -42,15 +42,16 @@ namespace boost { namespace numeric { namespace ublas { private: typedef T *pointer; typedef F functor_type; - typedef const banded_matrix const_self_type; typedef banded_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; + typedef vector vector_temporary_type; + typedef matrix matrix_temporary_type; // general sub-matrix typedef packed_tag storage_category; typedef typename F::orientation_category orientation_category; @@ -1077,11 +1078,12 @@ namespace boost { namespace numeric { namespace ublas { typename M::closure_type>::type matrix_closure_type; #endif private: - typedef const banded_adaptor const_self_type; typedef banded_adaptor self_type; public: - typedef const_self_type const_closure_type; + typedef const self_type const_closure_type; typedef self_type closure_type; + typedef typename M::vector_temporary_type vector_temporary_type; + typedef typename M::matrix_temporary_type matrix_temporary_type; typedef typename storage_restrict_traits::storage_category storage_category; typedef typename M::orientation_category orientation_category; diff --git a/include/boost/numeric/ublas/hermitian.hpp b/include/boost/numeric/ublas/hermitian.hpp index 3dc3302c..9ae30376 100644 --- a/include/boost/numeric/ublas/hermitian.hpp +++ b/include/boost/numeric/ublas/hermitian.hpp @@ -257,15 +257,16 @@ namespace boost { namespace numeric { namespace ublas { typedef T *pointer; typedef F1 functor1_type; typedef F2 functor2_type; - typedef const hermitian_matrix const_self_type; typedef hermitian_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; + typedef vector vector_temporary_type; + typedef matrix matrix_temporary_type; // general sub-matrix typedef packed_tag storage_category; typedef typename F1::packed_category packed_category; typedef typename F2::orientation_category orientation_category; @@ -1227,11 +1228,12 @@ namespace boost { namespace numeric { namespace ublas { typename M::closure_type>::type matrix_closure_type; #endif private: - typedef const hermitian_adaptor const_self_type; typedef hermitian_adaptor self_type; public: - typedef const_self_type const_closure_type; + typedef const self_type const_closure_type; typedef self_type closure_type; + typedef typename M::vector_temporary_type vector_temporary_type; + typedef typename M::matrix_temporary_type matrix_temporary_type; typedef typename storage_restrict_traits::storage_category storage_category; typedef typename F::packed_category packed_category; diff --git a/include/boost/numeric/ublas/matrix.hpp b/include/boost/numeric/ublas/matrix.hpp index 8c43e9ad..a5dcc471 100644 --- a/include/boost/numeric/ublas/matrix.hpp +++ b/include/boost/numeric/ublas/matrix.hpp @@ -71,15 +71,16 @@ namespace boost { namespace numeric { namespace ublas { private: typedef T *pointer; typedef F functor_type; - typedef const matrix const_self_type; typedef matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; + typedef vector vector_temporary_type; + typedef self_type matrix_temporary_type; typedef dense_tag storage_category; // This could be better for performance, // typedef typename unknown_orientation_tag orientation_category; @@ -1029,15 +1030,16 @@ namespace boost { namespace numeric { namespace ublas { private: typedef T *pointer; typedef F functor_type; - typedef const vector_of_vector const_self_type; typedef vector_of_vector self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; + typedef vector vector_temporary_type; + typedef self_type matrix_temporary_type; typedef dense_tag storage_category; // This could be better for performance, // typedef typename unknown_orientation_tag orientation_category; @@ -1978,13 +1980,12 @@ namespace boost { namespace numeric { namespace ublas { typedef T &reference; private: typedef const T *const_pointer; - typedef const identity_matrix const_self_type; typedef identity_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; typedef packed_tag storage_category; @@ -2454,13 +2455,12 @@ namespace boost { namespace numeric { namespace ublas { typedef T &reference; private: typedef const T *const_pointer; - typedef const zero_matrix const_self_type; typedef zero_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; typedef sparse_tag storage_category; @@ -2909,13 +2909,12 @@ namespace boost { namespace numeric { namespace ublas { typedef T &reference; private: typedef const T *const_pointer; - typedef const scalar_matrix const_self_type; typedef scalar_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef dense_tag storage_category; typedef unknown_orientation_tag orientation_category; @@ -3353,15 +3352,16 @@ namespace boost { namespace numeric { namespace ublas { typedef const T *const_pointer; typedef T *pointer; private: - typedef const c_matrix const_self_type; typedef c_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; + typedef c_vector vector_temporary_type; // vector able to store all elements of c_matrix + typedef self_type matrix_temporary_type; typedef dense_tag storage_category; // This could be better for performance, // typedef typename unknown_orientation_tag orientation_category; diff --git a/include/boost/numeric/ublas/symmetric.hpp b/include/boost/numeric/ublas/symmetric.hpp index e1a05e0b..d362b0cc 100644 --- a/include/boost/numeric/ublas/symmetric.hpp +++ b/include/boost/numeric/ublas/symmetric.hpp @@ -60,15 +60,16 @@ namespace boost { namespace numeric { namespace ublas { typedef T *pointer; typedef F1 functor1_type; typedef F2 functor2_type; - typedef const symmetric_matrix const_self_type; typedef symmetric_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; + typedef vector vector_temporary_type; + typedef matrix matrix_temporary_type; // general sub-matrix typedef packed_tag storage_category; typedef typename F1::packed_category packed_category; typedef typename F2::orientation_category orientation_category; @@ -969,11 +970,12 @@ namespace boost { namespace numeric { namespace ublas { typename M::closure_type>::type matrix_closure_type; #endif private: - typedef const symmetric_adaptor const_self_type; typedef symmetric_adaptor self_type; public: - typedef const_self_type const_closure_type; + typedef const self_type const_closure_type; typedef self_type closure_type; + typedef typename M::vector_temporary_type vector_temporary_type; + typedef typename M::matrix_temporary_type matrix_temporary_type; typedef typename storage_restrict_traits::storage_category storage_category; typedef typename F::packed_category packed_category; diff --git a/include/boost/numeric/ublas/triangular.hpp b/include/boost/numeric/ublas/triangular.hpp index 2bb8755c..d0f4aaad 100644 --- a/include/boost/numeric/ublas/triangular.hpp +++ b/include/boost/numeric/ublas/triangular.hpp @@ -43,15 +43,16 @@ namespace boost { namespace numeric { namespace ublas { typedef T *pointer; typedef F1 functor1_type; typedef F2 functor2_type; - typedef const triangular_matrix const_self_type; typedef triangular_matrix self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; + typedef vector vector_temporary_type; + typedef matrix matrix_temporary_type; // general sub-matrix typedef packed_proxy_tag storage_category; typedef typename F1::packed_category packed_category; typedef typename F2::orientation_category orientation_category; @@ -971,11 +972,12 @@ namespace boost { namespace numeric { namespace ublas { typename M::closure_type>::type matrix_closure_type; #endif private: - typedef const triangular_adaptor const_self_type; typedef triangular_adaptor self_type; public: - typedef const_self_type const_closure_type; + typedef const self_type const_closure_type; typedef self_type closure_type; + typedef typename M::vector_temporary_type vector_temporary_type; + typedef typename M::matrix_temporary_type matrix_temporary_type; typedef typename storage_restrict_traits::storage_category storage_category; typedef typename F::packed_category packed_category; diff --git a/include/boost/numeric/ublas/vector.hpp b/include/boost/numeric/ublas/vector.hpp index 23009ac2..22ea0fc0 100644 --- a/include/boost/numeric/ublas/vector.hpp +++ b/include/boost/numeric/ublas/vector.hpp @@ -45,15 +45,15 @@ namespace boost { namespace numeric { namespace ublas { typedef A array_type; private: typedef T *pointer; - typedef const vector const_self_type; typedef vector self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const vector_const_reference const_closure_type; + typedef const vector_const_reference const_closure_type; #else - typedef const vector_reference const_closure_type; + typedef const vector_reference const_closure_type; #endif typedef vector_reference closure_type; + typedef self_type vector_temporary_type; typedef dense_tag storage_category; typedef concrete_tag simd_category; @@ -577,13 +577,12 @@ namespace boost { namespace numeric { namespace ublas { typedef T &reference; private: typedef const T *const_pointer; - typedef const unit_vector const_self_type; typedef unit_vector self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const vector_const_reference const_closure_type; + typedef const vector_const_reference const_closure_type; #else - typedef const vector_reference const_closure_type; + typedef const vector_reference const_closure_type; #endif typedef vector_reference closure_type; typedef packed_tag storage_category; @@ -834,13 +833,12 @@ namespace boost { namespace numeric { namespace ublas { typedef T &reference; private: typedef const T *const_pointer; - typedef const zero_vector const_self_type; typedef zero_vector self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const vector_const_reference const_closure_type; + typedef const vector_const_reference const_closure_type; #else - typedef const vector_reference const_closure_type; + typedef const vector_reference const_closure_type; #endif typedef vector_reference closure_type; typedef sparse_tag storage_category; @@ -1046,13 +1044,12 @@ namespace boost { namespace numeric { namespace ublas { typedef T &reference; private: typedef const T *const_pointer; - typedef const scalar_vector const_self_type; typedef scalar_vector self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const vector_const_reference const_closure_type; + typedef const vector_const_reference const_closure_type; #else - typedef const vector_reference const_closure_type; + typedef const vector_reference const_closure_type; #endif typedef dense_tag storage_category; @@ -1281,15 +1278,15 @@ namespace boost { namespace numeric { namespace ublas { typedef T *pointer; typedef const T *const_pointer; private: - typedef const c_vector const_self_type; typedef c_vector self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const vector_const_reference const_closure_type; + typedef const vector_const_reference const_closure_type; #else - typedef const vector_reference const_closure_type; + typedef const vector_reference const_closure_type; #endif typedef vector_reference closure_type; + typedef self_type vector_temporary_type; typedef dense_tag storage_category; typedef concrete_tag simd_category; diff --git a/include/boost/numeric/ublas/vector_of_vector.hpp b/include/boost/numeric/ublas/vector_of_vector.hpp index 48d4c656..b32df2b3 100644 --- a/include/boost/numeric/ublas/vector_of_vector.hpp +++ b/include/boost/numeric/ublas/vector_of_vector.hpp @@ -49,13 +49,12 @@ namespace boost { namespace numeric { namespace ublas { private: typedef T *pointer; typedef F functor_type; - typedef const generalized_vector_of_vector const_self_type; typedef generalized_vector_of_vector self_type; public: #ifndef BOOST_UBLAS_CT_REFERENCE_BASE_TYPEDEFS - typedef const matrix_const_reference const_closure_type; + typedef const matrix_const_reference const_closure_type; #else - typedef const matrix_reference const_closure_type; + typedef const matrix_reference const_closure_type; #endif typedef matrix_reference closure_type; typedef typename A::value_type vector_data_value_type;