109 lines
3.0 KiB
C++
109 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) 2004 Michael Stevens
|
|
* Use, modification and distribution are subject to the
|
|
* Boost Software License, Version 1.0. (See accompanying file
|
|
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
*/
|
|
|
|
/*
|
|
* Default construct test when possible
|
|
*/
|
|
|
|
template <class E>
|
|
struct default_construct
|
|
{
|
|
static void test() {}
|
|
};
|
|
template <class VC>
|
|
struct default_construct<boost::numeric::ublas::vector_container<VC> >
|
|
{
|
|
static void test()
|
|
{
|
|
VC default_constuct;
|
|
initialize_vector(default_constuct);
|
|
std::cout << "default construct = " << default_constuct << std::endl;
|
|
}
|
|
};
|
|
template <class MC>
|
|
struct default_construct<boost::numeric::ublas::matrix_container<MC> >
|
|
{
|
|
static void test()
|
|
{
|
|
MC default_constuct;
|
|
initialize_vector(default_constuct);
|
|
std::cout << "default construct = " << default_constuct << std::endl;
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Initialise test values in vector/matrix
|
|
*/
|
|
|
|
template <class V>
|
|
void initialize_vector(V& v)
|
|
{
|
|
typename V::size_type size = v.size();
|
|
for (typename V::size_type i = 0; i < size; ++i)
|
|
v[i] = typename V::value_type(i + 1.f);
|
|
}
|
|
|
|
template <class M>
|
|
void initialize_matrix_impl(M& m, ublas::packed_proxy_tag)
|
|
{
|
|
typename M::size_type size1 = m.size1();
|
|
#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
|
|
for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++i)
|
|
for (typename M::iterator2 j = i.begin(); j != i.end(); ++j)
|
|
*j = typename M::value_type(i.index1() * size1 + j.index2() + 1.f);
|
|
#else
|
|
for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++i)
|
|
for (typename M::iterator2 j = ublas::begin(i, ublas::iterator1_tag()); j != ublas::end(i, ublas::iterator1_tag()); ++j)
|
|
*j = typename M::value_type(i.index1() * size1 + j.index2() + 1.f);
|
|
#endif
|
|
}
|
|
|
|
template <class M>
|
|
void initialize_matrix_impl(M& m, ublas::sparse_proxy_tag)
|
|
{
|
|
typename M::size_type size1 = m.size1();
|
|
typename M::size_type size2 = m.size2();
|
|
for (typename M::size_type i = 0; i < size1; ++i)
|
|
for (typename M::size_type j = 0; j < size2; ++j)
|
|
m(i, j) = typename M::value_type(i * size1 + j + 1.f);
|
|
}
|
|
|
|
template <class M>
|
|
void initialize_matrix(M& m)
|
|
{
|
|
initialize_matrix_impl(m, typename M::storage_category());
|
|
}
|
|
|
|
template <class M>
|
|
void initialize_matrix(M& m, ublas::lower_tag)
|
|
{
|
|
typename M::size_type size1 = m.size1();
|
|
typename M::size_type size2 = m.size2();
|
|
for (typename M::size_type i = 0; i < size1; ++i)
|
|
{
|
|
typename M::size_type j = 0;
|
|
for (; j <= i; ++j)
|
|
m(i, j) = i * size1 + j + 1.f;
|
|
for (; j < size2; ++j)
|
|
m(i, j) = 0.f;
|
|
}
|
|
}
|
|
template <class M>
|
|
void initialize_matrix(M& m, ublas::upper_tag)
|
|
{
|
|
typename M::size_type size1 = m.size1();
|
|
typename M::size_type size2 = m.size2();
|
|
for (typename M::size_type i = 0; i < size1; ++i)
|
|
{
|
|
typename M::size_type j = 0;
|
|
for (; j < i; ++j)
|
|
m(i, j) = 0.f;
|
|
for (; j < size2; ++j)
|
|
m(i, j) = i * size1 + j + 1.f;
|
|
}
|
|
}
|