From dfeb0d0346a103c3bb30ff8d7a208fb90301092e Mon Sep 17 00:00:00 2001 From: Michael Stevens Date: Mon, 20 Sep 2004 13:29:50 +0000 Subject: [PATCH] detail::resize not required anymore [SVN r25273] --- include/boost/numeric/ublas/banded.hpp | 7 ++- include/boost/numeric/ublas/concepts.hpp | 2 +- include/boost/numeric/ublas/hermitian.hpp | 6 +-- include/boost/numeric/ublas/symmetric.hpp | 4 +- include/boost/numeric/ublas/triangular.hpp | 15 +++++- include/boost/numeric/ublas/vector.hpp | 57 ++-------------------- 6 files changed, 27 insertions(+), 64 deletions(-) diff --git a/include/boost/numeric/ublas/banded.hpp b/include/boost/numeric/ublas/banded.hpp index 33746294..8d26c3e6 100644 --- a/include/boost/numeric/ublas/banded.hpp +++ b/include/boost/numeric/ublas/banded.hpp @@ -122,12 +122,11 @@ namespace boost { namespace numeric { namespace ublas { if (preserve) { self_type temporary (size1, size2, lower, upper); // FIXME use matrix_resize_preserve on conformant compilers - // detail::matrix_resize_reserve (*this, temporary, size_, size_); + // detail::matrix_resize_preserve (*this, temporary, size_, size_); assign_temporary (temporary); } else - detail::resize (data (), (std::max) (size1, size2) * (lower + 1 + upper), preserve); - detail::resize (data (), (std::max) (size1, size2) * (lower + 1 + upper), preserve); + data ().resize ((std::max) (size1, size2) * (lower + 1 + upper)); } BOOST_UBLAS_INLINE @@ -136,7 +135,7 @@ namespace boost { namespace numeric { namespace ublas { size2_ = size2; lower_ = lower; upper_ = upper; - detail::resize (data (), (std::max) (size1, size2) * (lower + 1 + upper), true); + data ().resize ((std::max) (size1, size2) * (lower + 1 + upper), value_type (0)); } // Element access diff --git a/include/boost/numeric/ublas/concepts.hpp b/include/boost/numeric/ublas/concepts.hpp index 0d74a6bd..8e26d3df 100644 --- a/include/boost/numeric/ublas/concepts.hpp +++ b/include/boost/numeric/ublas/concepts.hpp @@ -486,7 +486,7 @@ namespace boost { namespace numeric { namespace ublas { // Resize c.resize (n, value_type (5)); // Resize - none preserving - detail::resize (c, n, false); + c.resize (n); } }; diff --git a/include/boost/numeric/ublas/hermitian.hpp b/include/boost/numeric/ublas/hermitian.hpp index bd43604a..c3c523e3 100644 --- a/include/boost/numeric/ublas/hermitian.hpp +++ b/include/boost/numeric/ublas/hermitian.hpp @@ -327,11 +327,11 @@ namespace boost { namespace numeric { namespace ublas { if (preserve) { self_type temporary (size_, size_); // FIXME use matrix_resize_preserve on conformant compilers - // detail::matrix_resize_reserve (*this, temporary, size_, size_); + // detail::matrix_resize_preserve (*this, temporary, size_, size_); assign_temporary (temporary); } else - detail::resize (data (), functor1_type::packed_size (size_, size_), preserve); + data ().resize (functor1_type::packed_size (size_, size_)); } BOOST_UBLAS_INLINE void resize (size_type size1, size_type size2, bool preserve = true) { @@ -340,7 +340,7 @@ namespace boost { namespace numeric { namespace ublas { BOOST_UBLAS_INLINE void resize_packed_preserve (size_type size) { size_ = BOOST_UBLAS_SAME (size, size); - detail::resize (data (), functor1_type::packed_size (size_, size_), false); + data ().resize (functor1_type::packed_size (size_, size_), value_type (0)); } // Element access diff --git a/include/boost/numeric/ublas/symmetric.hpp b/include/boost/numeric/ublas/symmetric.hpp index f8ba6b67..351388e0 100644 --- a/include/boost/numeric/ublas/symmetric.hpp +++ b/include/boost/numeric/ublas/symmetric.hpp @@ -134,7 +134,7 @@ namespace boost { namespace numeric { namespace ublas { assign_temporary (temporary); } else - detail::resize (data (), functor1_type::packed_size (size_, size_), preserve); + data ().resize (functor1_type::packed_size (size_, size_)); } BOOST_UBLAS_INLINE void resize (size_type size1, size_type size2, bool preserve = true) { @@ -143,7 +143,7 @@ namespace boost { namespace numeric { namespace ublas { BOOST_UBLAS_INLINE void resize_packed_preserve (size_type size) { size_ = BOOST_UBLAS_SAME (size, size); - detail::resize (data (), functor1_type::packed_size (size_, size_), false); + data ().resize (functor1_type::packed_size (size_, size_), value_type (0)); } // Element access diff --git a/include/boost/numeric/ublas/triangular.hpp b/include/boost/numeric/ublas/triangular.hpp index ddb0b9ff..52ad4317 100644 --- a/include/boost/numeric/ublas/triangular.hpp +++ b/include/boost/numeric/ublas/triangular.hpp @@ -106,7 +106,20 @@ namespace boost { namespace numeric { namespace ublas { void resize (size_type size1, size_type size2, bool preserve = true) { size1_ = size1; size2_ = size2; - detail::resize (data (), functor1_type::packed_size (size1, size2), preserve); + if (preserve) { + self_type temporary (size1_, size2_); + // FIXME use matrix_resize_preserve on conformant compilers + // detail::matrix_resize_preserve (*this, temporary, size1_, size2_); + assign_temporary (temporary); + } + else + data ().resize (functor1_type::packed_size (size1_, size2_)); + } + BOOST_UBLAS_INLINE + void resize_packed_preserve (size_type size) { + size1_ = size1; + size2_ = size2; + data ().resize (functor1_type::packed_size (size1_, size2_), value_type (0)); } // Element access diff --git a/include/boost/numeric/ublas/vector.hpp b/include/boost/numeric/ublas/vector.hpp index 41c5070c..b70d2447 100644 --- a/include/boost/numeric/ublas/vector.hpp +++ b/include/boost/numeric/ublas/vector.hpp @@ -29,58 +29,6 @@ namespace boost { namespace numeric { namespace ublas { - namespace detail { - using namespace boost::numeric::ublas; - - // Resizing helper. Allow 'preserve' parameter to be used where possible. - -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - // ISSUE Overloaded free function templates fail on some compilers! - // Thanks to Karl Meerbergen for the functor workaround which we use by default - template - struct resize_functor { - void operator() (A& a, typename A::size_type size, bool ) const { - a.resize (size, typename A::value_type (0)); - } - }; - // Specialise for storage_array - template - struct resize_functor > { - void operator() (A& a, typename A::size_type size, bool preserve) const { - if (preserve) - a.resize (size, typename A::value_type (0)); - else - a.resize_new (size); - } - }; - - template - BOOST_UBLAS_INLINE - void resize (A& a, typename A::size_type size, bool preserve) { - resize_functor() (a, size, preserve); - } -#else - template - BOOST_UBLAS_INLINE - void resize (A& a, typename A::size_type size, bool preserve) { - if (preserve) - a.resize (size, BOOST_UBLAS_TYPENAME A::value_type (0)); - else - a.resize_new (size); - } - /* ISSUE Specialise for std::vector ONLY - * however some (MSVC-6/7) compilers without template partial specialization - * also think this is ambiguous when std::vector is used! - */ - template - BOOST_UBLAS_INLINE - void resize (std::vector &a, typename std::vector::size_type size, bool ) { - a.resize (size); - } -#endif - } - - // Array based vector class template class vector: @@ -152,7 +100,10 @@ namespace boost { namespace numeric { namespace ublas { // Resizing BOOST_UBLAS_INLINE void resize (size_type size, bool preserve = true) { - detail::resize (data (), size, preserve); + if (preserve) + data ().resize (size, BOOST_UBLAS_TYPENAME A::value_type (0)); + else + data ().resize (size); } // Element access