2
0
mirror of https://github.com/boostorg/ublas.git synced 2026-02-21 03:22:14 +00:00

detail::resize not required anymore

[SVN r25273]
This commit is contained in:
Michael Stevens
2004-09-20 13:29:50 +00:00
parent f0e08c43cc
commit dfeb0d0346
6 changed files with 27 additions and 64 deletions

View File

@@ -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<functor_type> (*this, temporary, size_, size_);
// detail::matrix_resize_preserve<functor_type> (*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

View File

@@ -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);
}
};

View File

@@ -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<functor_type> (*this, temporary, size_, size_);
// detail::matrix_resize_preserve<functor_type> (*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

View File

@@ -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

View File

@@ -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<functor_type> (*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

View File

@@ -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 <class A>
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 <class A>
struct resize_functor<storage_array<A> > {
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<class A>
BOOST_UBLAS_INLINE
void resize (A& a, typename A::size_type size, bool preserve) {
resize_functor<A>() (a, size, preserve);
}
#else
template<class A>
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<class T, class ALLOC>
BOOST_UBLAS_INLINE
void resize (std::vector<T, ALLOC> &a, typename std::vector<T>::size_type size, bool ) {
a.resize (size);
}
#endif
}
// Array based vector class
template<class T, class A>
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