Chris@16
|
1 //
|
Chris@16
|
2 // Copyright (c) 2000-2010
|
Chris@16
|
3 // Joerg Walter, Mathias Koch, David Bellot
|
Chris@16
|
4 //
|
Chris@16
|
5 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
6 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
7 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8 //
|
Chris@16
|
9 // The authors gratefully acknowledge the support of
|
Chris@16
|
10 // GeNeSys mbH & Co. KG in producing this work.
|
Chris@16
|
11 //
|
Chris@16
|
12
|
Chris@16
|
13 /// \file fwd.hpp is essentially used to forward declare the main types
|
Chris@16
|
14
|
Chris@16
|
15 #ifndef BOOST_UBLAS_FWD_H
|
Chris@16
|
16 #define BOOST_UBLAS_FWD_H
|
Chris@16
|
17
|
Chris@16
|
18 #include <memory>
|
Chris@16
|
19
|
Chris@101
|
20 #ifdef BOOST_UBLAS_CPP_GE_2011
|
Chris@101
|
21 #include <array>
|
Chris@101
|
22 #endif
|
Chris@101
|
23
|
Chris@16
|
24 namespace boost { namespace numeric { namespace ublas {
|
Chris@16
|
25
|
Chris@16
|
26 // Storage types
|
Chris@16
|
27 template<class T, class ALLOC = std::allocator<T> >
|
Chris@16
|
28 class unbounded_array;
|
Chris@16
|
29
|
Chris@16
|
30 template<class T, std::size_t N, class ALLOC = std::allocator<T> >
|
Chris@16
|
31 class bounded_array;
|
Chris@16
|
32
|
Chris@16
|
33 template <class Z = std::size_t, class D = std::ptrdiff_t>
|
Chris@16
|
34 class basic_range;
|
Chris@16
|
35 template <class Z = std::size_t, class D = std::ptrdiff_t>
|
Chris@16
|
36 class basic_slice;
|
Chris@16
|
37 typedef basic_range<> range;
|
Chris@16
|
38 typedef basic_slice<> slice;
|
Chris@16
|
39 template<class A = unbounded_array<std::size_t> >
|
Chris@16
|
40 class indirect_array;
|
Chris@16
|
41
|
Chris@16
|
42 template<class I, class T, class ALLOC = std::allocator<std::pair<const I, T> > >
|
Chris@16
|
43 class map_std;
|
Chris@16
|
44 template<class I, class T, class ALLOC = std::allocator<std::pair<I, T> > >
|
Chris@16
|
45 class map_array;
|
Chris@16
|
46
|
Chris@16
|
47 // Expression types
|
Chris@16
|
48 struct scalar_tag {};
|
Chris@16
|
49
|
Chris@16
|
50 struct vector_tag {};
|
Chris@16
|
51 template<class E>
|
Chris@16
|
52 class vector_expression;
|
Chris@16
|
53 template<class C>
|
Chris@16
|
54 class vector_container;
|
Chris@16
|
55
|
Chris@16
|
56 template<class E>
|
Chris@16
|
57 class vector_reference;
|
Chris@16
|
58
|
Chris@16
|
59 struct matrix_tag {};
|
Chris@16
|
60
|
Chris@16
|
61 template<class E>
|
Chris@16
|
62 class matrix_expression;
|
Chris@16
|
63 template<class C>
|
Chris@16
|
64 class matrix_container;
|
Chris@16
|
65
|
Chris@16
|
66 template<class E>
|
Chris@16
|
67 class matrix_reference;
|
Chris@16
|
68
|
Chris@16
|
69 template<class V>
|
Chris@16
|
70 class vector_range;
|
Chris@16
|
71 template<class V>
|
Chris@16
|
72 class vector_slice;
|
Chris@16
|
73 template<class V, class IA = indirect_array<> >
|
Chris@16
|
74 class vector_indirect;
|
Chris@16
|
75
|
Chris@16
|
76 template<class M>
|
Chris@16
|
77 class matrix_row;
|
Chris@16
|
78 template<class M>
|
Chris@16
|
79 class matrix_column;
|
Chris@16
|
80 template<class M>
|
Chris@16
|
81 class matrix_vector_range;
|
Chris@16
|
82 template<class M>
|
Chris@16
|
83 class matrix_vector_slice;
|
Chris@16
|
84 template<class M, class IA = indirect_array<> >
|
Chris@16
|
85 class matrix_vector_indirect;
|
Chris@16
|
86 template<class M>
|
Chris@16
|
87 class matrix_range;
|
Chris@16
|
88 template<class M>
|
Chris@16
|
89 class matrix_slice;
|
Chris@16
|
90 template<class M, class IA = indirect_array<> >
|
Chris@16
|
91 class matrix_indirect;
|
Chris@16
|
92
|
Chris@16
|
93 template<class T, class A = unbounded_array<T> >
|
Chris@16
|
94 class vector;
|
Chris@101
|
95 #ifdef BOOST_UBLAS_CPP_GE_2011
|
Chris@101
|
96 template<class T, std::size_t N, class A = std::array<T, N> >
|
Chris@101
|
97 class fixed_vector;
|
Chris@101
|
98 #endif
|
Chris@16
|
99 template<class T, std::size_t N>
|
Chris@16
|
100 class bounded_vector;
|
Chris@16
|
101
|
Chris@16
|
102 template<class T = int, class ALLOC = std::allocator<T> >
|
Chris@16
|
103 class unit_vector;
|
Chris@16
|
104 template<class T = int, class ALLOC = std::allocator<T> >
|
Chris@16
|
105 class zero_vector;
|
Chris@16
|
106 template<class T = int, class ALLOC = std::allocator<T> >
|
Chris@16
|
107 class scalar_vector;
|
Chris@16
|
108
|
Chris@16
|
109 template<class T, std::size_t N>
|
Chris@16
|
110 class c_vector;
|
Chris@16
|
111
|
Chris@16
|
112 // Sparse vectors
|
Chris@16
|
113 template<class T, class A = map_std<std::size_t, T> >
|
Chris@16
|
114 class mapped_vector;
|
Chris@16
|
115 template<class T, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
|
Chris@16
|
116 class compressed_vector;
|
Chris@16
|
117 template<class T, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
|
Chris@16
|
118 class coordinate_vector;
|
Chris@16
|
119
|
Chris@16
|
120 // Matrix orientation type
|
Chris@16
|
121 struct unknown_orientation_tag {};
|
Chris@16
|
122 struct row_major_tag {};
|
Chris@16
|
123 struct column_major_tag {};
|
Chris@16
|
124
|
Chris@16
|
125 // Matrix storage layout parameterisation
|
Chris@16
|
126 template <class Z = std::size_t, class D = std::ptrdiff_t>
|
Chris@16
|
127 struct basic_row_major;
|
Chris@16
|
128 typedef basic_row_major<> row_major;
|
Chris@16
|
129
|
Chris@16
|
130 template <class Z = std::size_t, class D = std::ptrdiff_t>
|
Chris@16
|
131 struct basic_column_major;
|
Chris@16
|
132 typedef basic_column_major<> column_major;
|
Chris@16
|
133
|
Chris@16
|
134 template<class T, class L = row_major, class A = unbounded_array<T> >
|
Chris@16
|
135 class matrix;
|
Chris@101
|
136 #ifdef BOOST_UBLAS_CPP_GE_2011
|
Chris@101
|
137 template<class T, std::size_t M, std::size_t N, class L = row_major, class A = std::array<T, M*N> >
|
Chris@101
|
138 class fixed_matrix;
|
Chris@101
|
139 #endif
|
Chris@16
|
140 template<class T, std::size_t M, std::size_t N, class L = row_major>
|
Chris@16
|
141 class bounded_matrix;
|
Chris@16
|
142
|
Chris@16
|
143 template<class T = int, class ALLOC = std::allocator<T> >
|
Chris@16
|
144 class identity_matrix;
|
Chris@16
|
145 template<class T = int, class ALLOC = std::allocator<T> >
|
Chris@16
|
146 class zero_matrix;
|
Chris@16
|
147 template<class T = int, class ALLOC = std::allocator<T> >
|
Chris@16
|
148 class scalar_matrix;
|
Chris@16
|
149
|
Chris@16
|
150 template<class T, std::size_t M, std::size_t N>
|
Chris@16
|
151 class c_matrix;
|
Chris@16
|
152
|
Chris@16
|
153 template<class T, class L = row_major, class A = unbounded_array<unbounded_array<T> > >
|
Chris@16
|
154 class vector_of_vector;
|
Chris@16
|
155
|
Chris@16
|
156 template<class T, class L = row_major, class A = vector<compressed_vector<T> > >
|
Chris@16
|
157 class generalized_vector_of_vector;
|
Chris@16
|
158
|
Chris@16
|
159 // Triangular matrix type
|
Chris@16
|
160 struct lower_tag {};
|
Chris@16
|
161 struct upper_tag {};
|
Chris@16
|
162 struct unit_lower_tag : public lower_tag {};
|
Chris@16
|
163 struct unit_upper_tag : public upper_tag {};
|
Chris@16
|
164 struct strict_lower_tag : public lower_tag {};
|
Chris@16
|
165 struct strict_upper_tag : public upper_tag {};
|
Chris@16
|
166
|
Chris@16
|
167 // Triangular matrix parameterisation
|
Chris@16
|
168 template <class Z = std::size_t>
|
Chris@16
|
169 struct basic_full;
|
Chris@16
|
170 typedef basic_full<> full;
|
Chris@16
|
171
|
Chris@16
|
172 template <class Z = std::size_t>
|
Chris@16
|
173 struct basic_lower;
|
Chris@16
|
174 typedef basic_lower<> lower;
|
Chris@16
|
175
|
Chris@16
|
176 template <class Z = std::size_t>
|
Chris@16
|
177 struct basic_upper;
|
Chris@16
|
178 typedef basic_upper<> upper;
|
Chris@16
|
179
|
Chris@16
|
180 template <class Z = std::size_t>
|
Chris@16
|
181 struct basic_unit_lower;
|
Chris@16
|
182 typedef basic_unit_lower<> unit_lower;
|
Chris@16
|
183
|
Chris@16
|
184 template <class Z = std::size_t>
|
Chris@16
|
185 struct basic_unit_upper;
|
Chris@16
|
186 typedef basic_unit_upper<> unit_upper;
|
Chris@16
|
187
|
Chris@16
|
188 template <class Z = std::size_t>
|
Chris@16
|
189 struct basic_strict_lower;
|
Chris@16
|
190 typedef basic_strict_lower<> strict_lower;
|
Chris@16
|
191
|
Chris@16
|
192 template <class Z = std::size_t>
|
Chris@16
|
193 struct basic_strict_upper;
|
Chris@16
|
194 typedef basic_strict_upper<> strict_upper;
|
Chris@16
|
195
|
Chris@16
|
196 // Special matrices
|
Chris@16
|
197 template<class T, class L = row_major, class A = unbounded_array<T> >
|
Chris@16
|
198 class banded_matrix;
|
Chris@16
|
199 template<class T, class L = row_major, class A = unbounded_array<T> >
|
Chris@16
|
200 class diagonal_matrix;
|
Chris@16
|
201
|
Chris@16
|
202 template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
|
Chris@16
|
203 class triangular_matrix;
|
Chris@16
|
204 template<class M, class TRI = lower>
|
Chris@16
|
205 class triangular_adaptor;
|
Chris@16
|
206
|
Chris@16
|
207 template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
|
Chris@16
|
208 class symmetric_matrix;
|
Chris@16
|
209 template<class M, class TRI = lower>
|
Chris@16
|
210 class symmetric_adaptor;
|
Chris@16
|
211
|
Chris@16
|
212 template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
|
Chris@16
|
213 class hermitian_matrix;
|
Chris@16
|
214 template<class M, class TRI = lower>
|
Chris@16
|
215 class hermitian_adaptor;
|
Chris@16
|
216
|
Chris@16
|
217 // Sparse matrices
|
Chris@16
|
218 template<class T, class L = row_major, class A = map_std<std::size_t, T> >
|
Chris@16
|
219 class mapped_matrix;
|
Chris@16
|
220 template<class T, class L = row_major, class A = map_std<std::size_t, map_std<std::size_t, T> > >
|
Chris@16
|
221 class mapped_vector_of_mapped_vector;
|
Chris@16
|
222 template<class T, class L = row_major, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
|
Chris@16
|
223 class compressed_matrix;
|
Chris@16
|
224 template<class T, class L = row_major, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
|
Chris@16
|
225 class coordinate_matrix;
|
Chris@16
|
226
|
Chris@16
|
227 }}}
|
Chris@16
|
228
|
Chris@16
|
229 #endif
|