Update contrib.
2 // Copyright (c) 2000-2002
3 // Joerg Walter, Mathias Koch
5 // Permission to use, copy, modify, distribute and sell this software
6 // and its documentation for any purpose is hereby granted without fee,
7 // provided that the above copyright notice appear in all copies and
8 // that both that copyright notice and this permission notice appear
9 // in supporting documentation. The authors make no representations
10 // about the suitability of this software for any purpose.
11 // It is provided "as is" without express or implied warranty.
13 // The authors gratefully acknowledge the support of
14 // GeNeSys mbH & Co. KG in producing this work.
17 #ifndef BOOST_UBLAS_FWD_H
18 #define BOOST_UBLAS_FWD_H
22 namespace boost { namespace numeric { namespace ublas {
25 template<class T, class ALLOC = std::allocator<T> >
26 class unbounded_array;
28 template<class T, std::size_t N, class ALLOC = std::allocator<T> >
31 template <class Z = std::size_t, class D = std::ptrdiff_t>
33 template <class Z = std::size_t, class D = std::ptrdiff_t>
35 typedef basic_range<> range;
36 typedef basic_slice<> slice;
37 template<class A = unbounded_array<std::size_t> >
40 template<class I, class T, class ALLOC = std::allocator<std::pair<const I, T> > >
42 template<class I, class T, class ALLOC = std::allocator<std::pair<I, T> > >
50 class vector_expression;
52 class vector_container;
55 class vector_reference;
60 class matrix_expression;
62 class matrix_container;
65 class matrix_reference;
71 template<class V, class IA = indirect_array<> >
72 class vector_indirect;
79 class matrix_vector_range;
81 class matrix_vector_slice;
82 template<class M, class IA = indirect_array<> >
83 class matrix_vector_indirect;
88 template<class M, class IA = indirect_array<> >
89 class matrix_indirect;
91 template<class T, class A = unbounded_array<T> >
93 template<class T, std::size_t N>
96 template<class T = int>
98 template<class T = int>
100 template<class T = int>
103 template<class T, std::size_t N>
107 template<class T, class A = map_std<std::size_t, T> >
109 template<class T, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
110 class compressed_vector;
111 template<class T, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
112 class coordinate_vector;
114 // Matrix orientation type
115 struct unknown_orientation_tag {};
116 struct row_major_tag {};
117 struct column_major_tag {};
119 // Matrix storage layout parameterisation
120 template <class Z = std::size_t, class D = std::ptrdiff_t>
121 struct basic_row_major;
122 typedef basic_row_major<> row_major;
124 template <class Z = std::size_t, class D = std::ptrdiff_t>
125 struct basic_column_major;
126 typedef basic_column_major<> column_major;
128 template<class T, class L = row_major, class A = unbounded_array<T> >
130 template<class T, std::size_t M, std::size_t N, class L = row_major>
131 class bounded_matrix;
133 template<class T = int>
134 class identity_matrix;
135 template<class T = int>
137 template<class T = int>
140 template<class T, std::size_t M, std::size_t N>
143 template<class T, class L = row_major, class A = unbounded_array<unbounded_array<T> > >
144 class vector_of_vector;
146 // Triangular matrix type
149 struct unit_lower_tag : public lower_tag {};
150 struct unit_upper_tag : public upper_tag {};
151 struct strict_lower_tag : public lower_tag {};
152 struct strict_upper_tag : public upper_tag {};
154 // Triangular matrix parameterisation
155 template <class Z = std::size_t>
157 typedef basic_full<> full;
159 template <class Z = std::size_t>
161 typedef basic_lower<> lower;
163 template <class Z = std::size_t>
165 typedef basic_upper<> upper;
167 template <class Z = std::size_t>
168 struct basic_unit_lower;
169 typedef basic_unit_lower<> unit_lower;
171 template <class Z = std::size_t>
172 struct basic_unit_upper;
173 typedef basic_unit_upper<> unit_upper;
175 template <class Z = std::size_t>
176 struct basic_strict_lower;
177 typedef basic_strict_lower<> strict_lower;
179 template <class Z = std::size_t>
180 struct basic_strict_upper;
181 typedef basic_strict_upper<> strict_upper;
184 template<class T, class L = row_major, class A = unbounded_array<T> >
186 template<class T, class L = row_major, class A = unbounded_array<T> >
187 class diagonal_matrix;
189 template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
190 class triangular_matrix;
191 template<class M, class TRI = lower>
192 class triangular_adaptor;
194 template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
195 class symmetric_matrix;
196 template<class M, class TRI = lower>
197 class symmetric_adaptor;
199 template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
200 class hermitian_matrix;
201 template<class M, class TRI = lower>
202 class hermitian_adaptor;
205 template<class T, class L = row_major, class A = map_std<std::size_t, T> >
207 template<class T, class L = row_major, class A = map_std<std::size_t, map_std<std::size_t, T> > >
208 class mapped_vector_of_mapped_vector;
209 template<class T, class L = row_major, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
210 class compressed_matrix;
211 template<class T, class L = row_major, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
212 class coordinate_matrix;