Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/numeric/ublas/test/common/init.hpp @ 12

Last change on this file since 12 was 12, checked in by landauf, 17 years ago

added boost

File size: 3.1 KB
Line 
1/*
2 * Copyright (c) 2004 Michael Stevens
3 * Use, modification and distribution are subject to the
4 * Boost Software License, Version 1.0. (See accompanying file
5 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 */
7
8/*
9 * Default construct test when possible
10 */
11
12template <class E>
13struct default_construct
14{
15    static void test() {}
16}; 
17template <class VC>
18struct default_construct<boost::numeric::ublas::vector_container<VC> >
19{
20    static void test ()
21    {
22        VC default_constuct;
23        initialize_vector (default_constuct);
24        std::cout << "default construct = " << default_constuct << std::endl;
25    }
26};
27template <class MC>
28struct default_construct<boost::numeric::ublas::matrix_container<MC> >
29{
30    static void test ()
31    {
32        MC default_constuct;
33        initialize_vector (default_constuct);
34        std::cout << "default construct = " << default_constuct << std::endl;
35    }
36};
37
38/*
39 * Initialise test values in vector/matrix
40 */
41
42template<class V>
43void initialize_vector (V &v) {
44    typename V::size_type size = v.size ();
45    for (typename V::size_type i = 0; i < size; ++ i)
46        v [i] = typename V::value_type (i + 1);
47}
48
49template<class M>
50void initialize_matrix_impl (M &m, ublas::packed_proxy_tag) {
51    typename M::size_type size1 = m.size1 ();
52#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
53    for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i)
54        for (typename M::iterator2 j = i.begin(); j != i.end(); ++ j)
55            *j = typename M::value_type (i.index1() * size1 + j.index2() + 1);
56#else
57    for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i)
58        for (typename M::iterator2 j = ublas::begin (i, ublas::iterator1_tag ()); j != ublas::end (i, ublas::iterator1_tag ()); ++ j)
59            *j = typename M::value_type (i.index1() * size1 + j.index2() + 1);
60#endif
61}
62
63template<class M>
64void initialize_matrix_impl (M &m, ublas::sparse_proxy_tag) {
65    typename M::size_type size1 = m.size1 ();
66    typename M::size_type size2 = m.size2 ();
67    for (typename M::size_type i = 0; i < size1; ++ i)
68        for (typename M::size_type j = 0; j < size2; ++ j)
69            m (i, j) = typename M::value_type (i * size1 + j + 1.f);
70}
71
72template<class M>
73void initialize_matrix (M &m) {
74    initialize_matrix_impl (m, typename M::storage_category());
75}
76
77template<class M>
78void initialize_matrix (M &m, ublas::lower_tag) {
79    typename M::size_type size1 = m.size1 ();
80    typename M::size_type size2 = m.size2 ();
81    for (typename M::size_type i = 0; i < size1; ++ i) {
82        typename M::size_type j = 0;
83        for (; j <= i; ++ j)
84            m (i, j) = i * size1 + j + 1.f;
85        for (; j < size2; ++ j)
86            m (i, j) = 0.f;
87    }
88}
89template<class M>
90void initialize_matrix (M &m, ublas::upper_tag) {
91    typename M::size_type size1 = m.size1 ();
92    typename M::size_type size2 = m.size2 ();
93    for (typename M::size_type i = 0; i < size1; ++ i) {
94        typename M::size_type j = 0;
95        for (; j < i; ++ j)
96            m (i, j) = 0.f;
97        for (; j < size2; ++ j)
98            m (i, j) = i * size1 + j + 1.f;
99    }
100}
Note: See TracBrowser for help on using the repository browser.