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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user