Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/numeric/ublas/detail/raw.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 // | |
2 // Copyright (c) 2002-2003 | |
3 // Toon Knapen, Kresimir Fresl, Joerg Walter | |
4 // | |
5 // Distributed under the Boost Software License, Version 1.0. (See | |
6 // accompanying file LICENSE_1_0.txt or copy at | |
7 // http://www.boost.org/LICENSE_1_0.txt) | |
8 // | |
9 // | |
10 | |
11 #ifndef _BOOST_UBLAS_RAW_ | |
12 #define _BOOST_UBLAS_RAW_ | |
13 | |
14 namespace boost { namespace numeric { namespace ublas { namespace raw { | |
15 | |
16 // We need data_const() mostly due to MSVC 6.0. | |
17 // But how shall we write portable code otherwise? | |
18 | |
19 template < typename V > | |
20 BOOST_UBLAS_INLINE | |
21 int size( const V &v ) ; | |
22 | |
23 template < typename V > | |
24 BOOST_UBLAS_INLINE | |
25 int size( const vector_reference<V> &v ) ; | |
26 | |
27 template < typename M > | |
28 BOOST_UBLAS_INLINE | |
29 int size1( const M &m ) ; | |
30 template < typename M > | |
31 BOOST_UBLAS_INLINE | |
32 int size2( const M &m ) ; | |
33 | |
34 template < typename M > | |
35 BOOST_UBLAS_INLINE | |
36 int size1( const matrix_reference<M> &m ) ; | |
37 template < typename M > | |
38 BOOST_UBLAS_INLINE | |
39 int size2( const matrix_reference<M> &m ) ; | |
40 | |
41 template < typename M > | |
42 BOOST_UBLAS_INLINE | |
43 int leading_dimension( const M &m, row_major_tag ) ; | |
44 template < typename M > | |
45 BOOST_UBLAS_INLINE | |
46 int leading_dimension( const M &m, column_major_tag ) ; | |
47 template < typename M > | |
48 BOOST_UBLAS_INLINE | |
49 int leading_dimension( const M &m ) ; | |
50 | |
51 template < typename M > | |
52 BOOST_UBLAS_INLINE | |
53 int leading_dimension( const matrix_reference<M> &m ) ; | |
54 | |
55 template < typename V > | |
56 BOOST_UBLAS_INLINE | |
57 int stride( const V &v ) ; | |
58 | |
59 template < typename V > | |
60 BOOST_UBLAS_INLINE | |
61 int stride( const vector_range<V> &v ) ; | |
62 template < typename V > | |
63 BOOST_UBLAS_INLINE | |
64 int stride( const vector_slice<V> &v ) ; | |
65 | |
66 template < typename M > | |
67 BOOST_UBLAS_INLINE | |
68 int stride( const matrix_row<M> &v ) ; | |
69 template < typename M > | |
70 BOOST_UBLAS_INLINE | |
71 int stride( const matrix_column<M> &v ) ; | |
72 | |
73 template < typename M > | |
74 BOOST_UBLAS_INLINE | |
75 int stride1( const M &m ) ; | |
76 template < typename M > | |
77 BOOST_UBLAS_INLINE | |
78 int stride2( const M &m ) ; | |
79 | |
80 template < typename M > | |
81 BOOST_UBLAS_INLINE | |
82 int stride1( const matrix_reference<M> &m ) ; | |
83 template < typename M > | |
84 BOOST_UBLAS_INLINE | |
85 int stride2( const matrix_reference<M> &m ) ; | |
86 | |
87 template < typename T, std::size_t M, std::size_t N > | |
88 BOOST_UBLAS_INLINE | |
89 int stride1( const c_matrix<T, M, N> &m ) ; | |
90 template < typename T, std::size_t M, std::size_t N > | |
91 BOOST_UBLAS_INLINE | |
92 int stride2( const c_matrix<T, M, N> &m ) ; | |
93 | |
94 template < typename M > | |
95 BOOST_UBLAS_INLINE | |
96 int stride1( const matrix_range<M> &m ) ; | |
97 template < typename M > | |
98 BOOST_UBLAS_INLINE | |
99 int stride1( const matrix_slice<M> &m ) ; | |
100 template < typename M > | |
101 BOOST_UBLAS_INLINE | |
102 int stride2( const matrix_range<M> &m ) ; | |
103 template < typename M > | |
104 BOOST_UBLAS_INLINE | |
105 int stride2( const matrix_slice<M> &m ) ; | |
106 | |
107 template < typename MV > | |
108 BOOST_UBLAS_INLINE | |
109 typename MV::array_type::array_type::const_pointer data( const MV &mv ) ; | |
110 template < typename MV > | |
111 BOOST_UBLAS_INLINE | |
112 typename MV::array_type::array_type::const_pointer data_const( const MV &mv ) ; | |
113 template < typename MV > | |
114 BOOST_UBLAS_INLINE | |
115 typename MV::array_type::pointer data( MV &mv ) ; | |
116 | |
117 template < typename V > | |
118 BOOST_UBLAS_INLINE | |
119 typename V::array_type::array_type::const_pointer data( const vector_reference<V> &v ) ; | |
120 template < typename V > | |
121 BOOST_UBLAS_INLINE | |
122 typename V::array_type::array_type::const_pointer data_const( const vector_reference<V> &v ) ; | |
123 template < typename V > | |
124 BOOST_UBLAS_INLINE | |
125 typename V::array_type::pointer data( vector_reference<V> &v ) ; | |
126 | |
127 template < typename T, std::size_t N > | |
128 BOOST_UBLAS_INLINE | |
129 typename c_vector<T, N>::array_type::array_type::const_pointer data( const c_vector<T, N> &v ) ; | |
130 template < typename T, std::size_t N > | |
131 BOOST_UBLAS_INLINE | |
132 typename c_vector<T, N>::array_type::array_type::const_pointer data_const( const c_vector<T, N> &v ) ; | |
133 template < typename T, std::size_t N > | |
134 BOOST_UBLAS_INLINE | |
135 typename c_vector<T, N>::pointer data( c_vector<T, N> &v ) ; | |
136 | |
137 template < typename V > | |
138 BOOST_UBLAS_INLINE | |
139 typename V::array_type::array_type::const_pointer data( const vector_range<V> &v ) ; | |
140 template < typename V > | |
141 BOOST_UBLAS_INLINE | |
142 typename V::array_type::array_type::const_pointer data( const vector_slice<V> &v ) ; | |
143 template < typename V > | |
144 BOOST_UBLAS_INLINE | |
145 typename V::array_type::array_type::const_pointer data_const( const vector_range<V> &v ) ; | |
146 template < typename V > | |
147 BOOST_UBLAS_INLINE | |
148 typename V::array_type::array_type::const_pointer data_const( const vector_slice<V> &v ) ; | |
149 template < typename V > | |
150 BOOST_UBLAS_INLINE | |
151 typename V::array_type::pointer data( vector_range<V> &v ) ; | |
152 template < typename V > | |
153 BOOST_UBLAS_INLINE | |
154 typename V::array_type::pointer data( vector_slice<V> &v ) ; | |
155 | |
156 template < typename M > | |
157 BOOST_UBLAS_INLINE | |
158 typename M::array_type::array_type::const_pointer data( const matrix_reference<M> &m ) ; | |
159 template < typename M > | |
160 BOOST_UBLAS_INLINE | |
161 typename M::array_type::array_type::const_pointer data_const( const matrix_reference<M> &m ) ; | |
162 template < typename M > | |
163 BOOST_UBLAS_INLINE | |
164 typename M::array_type::pointer data( matrix_reference<M> &m ) ; | |
165 | |
166 template < typename T, std::size_t M, std::size_t N > | |
167 BOOST_UBLAS_INLINE | |
168 typename c_matrix<T, M, N>::array_type::array_type::const_pointer data( const c_matrix<T, M, N> &m ) ; | |
169 template < typename T, std::size_t M, std::size_t N > | |
170 BOOST_UBLAS_INLINE | |
171 typename c_matrix<T, M, N>::array_type::array_type::const_pointer data_const( const c_matrix<T, M, N> &m ) ; | |
172 template < typename T, std::size_t M, std::size_t N > | |
173 BOOST_UBLAS_INLINE | |
174 typename c_matrix<T, M, N>::pointer data( c_matrix<T, M, N> &m ) ; | |
175 | |
176 template < typename M > | |
177 BOOST_UBLAS_INLINE | |
178 typename M::array_type::array_type::const_pointer data( const matrix_row<M> &v ) ; | |
179 template < typename M > | |
180 BOOST_UBLAS_INLINE | |
181 typename M::array_type::array_type::const_pointer data( const matrix_column<M> &v ) ; | |
182 template < typename M > | |
183 BOOST_UBLAS_INLINE | |
184 typename M::array_type::array_type::const_pointer data_const( const matrix_row<M> &v ) ; | |
185 template < typename M > | |
186 BOOST_UBLAS_INLINE | |
187 typename M::array_type::array_type::const_pointer data_const( const matrix_column<M> &v ) ; | |
188 template < typename M > | |
189 BOOST_UBLAS_INLINE | |
190 typename M::array_type::pointer data( matrix_row<M> &v ) ; | |
191 template < typename M > | |
192 BOOST_UBLAS_INLINE | |
193 typename M::array_type::pointer data( matrix_column<M> &v ) ; | |
194 | |
195 template < typename M > | |
196 BOOST_UBLAS_INLINE | |
197 typename M::array_type::array_type::const_pointer data( const matrix_range<M> &m ) ; | |
198 template < typename M > | |
199 BOOST_UBLAS_INLINE | |
200 typename M::array_type::array_type::const_pointer data( const matrix_slice<M> &m ) ; | |
201 template < typename M > | |
202 BOOST_UBLAS_INLINE | |
203 typename M::array_type::array_type::const_pointer data_const( const matrix_range<M> &m ) ; | |
204 template < typename M > | |
205 BOOST_UBLAS_INLINE | |
206 typename M::array_type::array_type::const_pointer data_const( const matrix_slice<M> &m ) ; | |
207 template < typename M > | |
208 BOOST_UBLAS_INLINE | |
209 typename M::array_type::pointer data( matrix_range<M> &m ) ; | |
210 template < typename M > | |
211 BOOST_UBLAS_INLINE | |
212 typename M::array_type::pointer data( matrix_slice<M> &m ) ; | |
213 | |
214 template < typename MV > | |
215 BOOST_UBLAS_INLINE | |
216 typename MV::array_type::array_type::const_pointer base( const MV &mv ) ; | |
217 | |
218 template < typename MV > | |
219 BOOST_UBLAS_INLINE | |
220 typename MV::array_type::array_type::const_pointer base_const( const MV &mv ) ; | |
221 template < typename MV > | |
222 BOOST_UBLAS_INLINE | |
223 typename MV::array_type::pointer base( MV &mv ) ; | |
224 | |
225 template < typename V > | |
226 BOOST_UBLAS_INLINE | |
227 typename V::array_type::array_type::const_pointer base( const vector_reference<V> &v ) ; | |
228 template < typename V > | |
229 BOOST_UBLAS_INLINE | |
230 typename V::array_type::array_type::const_pointer base_const( const vector_reference<V> &v ) ; | |
231 template < typename V > | |
232 BOOST_UBLAS_INLINE | |
233 typename V::array_type::pointer base( vector_reference<V> &v ) ; | |
234 | |
235 template < typename T, std::size_t N > | |
236 BOOST_UBLAS_INLINE | |
237 typename c_vector<T, N>::array_type::array_type::const_pointer base( const c_vector<T, N> &v ) ; | |
238 template < typename T, std::size_t N > | |
239 BOOST_UBLAS_INLINE | |
240 typename c_vector<T, N>::array_type::array_type::const_pointer base_const( const c_vector<T, N> &v ) ; | |
241 template < typename T, std::size_t N > | |
242 BOOST_UBLAS_INLINE | |
243 typename c_vector<T, N>::pointer base( c_vector<T, N> &v ) ; | |
244 | |
245 template < typename V > | |
246 BOOST_UBLAS_INLINE | |
247 typename V::array_type::array_type::const_pointer base( const vector_range<V> &v ) ; | |
248 template < typename V > | |
249 BOOST_UBLAS_INLINE | |
250 typename V::array_type::array_type::const_pointer base( const vector_slice<V> &v ) ; | |
251 template < typename V > | |
252 BOOST_UBLAS_INLINE | |
253 typename V::array_type::array_type::const_pointer base_const( const vector_range<V> &v ) ; | |
254 template < typename V > | |
255 BOOST_UBLAS_INLINE | |
256 typename V::array_type::array_type::const_pointer base_const( const vector_slice<V> &v ) ; | |
257 template < typename V > | |
258 BOOST_UBLAS_INLINE | |
259 typename V::array_type::pointer base( vector_range<V> &v ) ; | |
260 template < typename V > | |
261 BOOST_UBLAS_INLINE | |
262 typename V::array_type::pointer base( vector_slice<V> &v ) ; | |
263 | |
264 template < typename M > | |
265 BOOST_UBLAS_INLINE | |
266 typename M::array_type::array_type::const_pointer base( const matrix_reference<M> &m ) ; | |
267 template < typename M > | |
268 BOOST_UBLAS_INLINE | |
269 typename M::array_type::array_type::const_pointer base_const( const matrix_reference<M> &m ) ; | |
270 template < typename M > | |
271 BOOST_UBLAS_INLINE | |
272 typename M::array_type::pointer base( matrix_reference<M> &m ) ; | |
273 | |
274 template < typename T, std::size_t M, std::size_t N > | |
275 BOOST_UBLAS_INLINE | |
276 typename c_matrix<T, M, N>::array_type::array_type::const_pointer base( const c_matrix<T, M, N> &m ) ; | |
277 template < typename T, std::size_t M, std::size_t N > | |
278 BOOST_UBLAS_INLINE | |
279 typename c_matrix<T, M, N>::array_type::array_type::const_pointer base_const( const c_matrix<T, M, N> &m ) ; | |
280 template < typename T, std::size_t M, std::size_t N > | |
281 BOOST_UBLAS_INLINE | |
282 typename c_matrix<T, M, N>::pointer base( c_matrix<T, M, N> &m ) ; | |
283 | |
284 template < typename M > | |
285 BOOST_UBLAS_INLINE | |
286 typename M::array_type::array_type::const_pointer base( const matrix_row<M> &v ) ; | |
287 template < typename M > | |
288 BOOST_UBLAS_INLINE | |
289 typename M::array_type::array_type::const_pointer base( const matrix_column<M> &v ) ; | |
290 template < typename M > | |
291 BOOST_UBLAS_INLINE | |
292 typename M::array_type::array_type::const_pointer base_const( const matrix_row<M> &v ) ; | |
293 template < typename M > | |
294 BOOST_UBLAS_INLINE | |
295 typename M::array_type::array_type::const_pointer base_const( const matrix_column<M> &v ) ; | |
296 template < typename M > | |
297 BOOST_UBLAS_INLINE | |
298 typename M::array_type::pointer base( matrix_row<M> &v ) ; | |
299 template < typename M > | |
300 BOOST_UBLAS_INLINE | |
301 typename M::array_type::pointer base( matrix_column<M> &v ) ; | |
302 | |
303 template < typename M > | |
304 BOOST_UBLAS_INLINE | |
305 typename M::array_type::array_type::const_pointer base( const matrix_range<M> &m ) ; | |
306 template < typename M > | |
307 BOOST_UBLAS_INLINE | |
308 typename M::array_type::array_type::const_pointer base( const matrix_slice<M> &m ) ; | |
309 template < typename M > | |
310 BOOST_UBLAS_INLINE | |
311 typename M::array_type::array_type::const_pointer base_const( const matrix_range<M> &m ) ; | |
312 template < typename M > | |
313 BOOST_UBLAS_INLINE | |
314 typename M::array_type::array_type::const_pointer base_const( const matrix_slice<M> &m ) ; | |
315 template < typename M > | |
316 BOOST_UBLAS_INLINE | |
317 typename M::array_type::pointer base( matrix_range<M> &m ) ; | |
318 template < typename M > | |
319 BOOST_UBLAS_INLINE | |
320 typename M::array_type::pointer base( matrix_slice<M> &m ) ; | |
321 | |
322 template < typename MV > | |
323 BOOST_UBLAS_INLINE | |
324 typename MV::size_type start( const MV &mv ) ; | |
325 | |
326 template < typename V > | |
327 BOOST_UBLAS_INLINE | |
328 typename V::size_type start( const vector_range<V> &v ) ; | |
329 template < typename V > | |
330 BOOST_UBLAS_INLINE | |
331 typename V::size_type start( const vector_slice<V> &v ) ; | |
332 | |
333 template < typename M > | |
334 BOOST_UBLAS_INLINE | |
335 typename M::size_type start( const matrix_row<M> &v ) ; | |
336 template < typename M > | |
337 BOOST_UBLAS_INLINE | |
338 typename M::size_type start( const matrix_column<M> &v ) ; | |
339 | |
340 template < typename M > | |
341 BOOST_UBLAS_INLINE | |
342 typename M::size_type start( const matrix_range<M> &m ) ; | |
343 template < typename M > | |
344 BOOST_UBLAS_INLINE | |
345 typename M::size_type start( const matrix_slice<M> &m ) ; | |
346 | |
347 | |
348 | |
349 template < typename V > | |
350 BOOST_UBLAS_INLINE | |
351 int size( const V &v ) { | |
352 return v.size() ; | |
353 } | |
354 | |
355 template < typename V > | |
356 BOOST_UBLAS_INLINE | |
357 int size( const vector_reference<V> &v ) { | |
358 return size( v ) ; | |
359 } | |
360 | |
361 template < typename M > | |
362 BOOST_UBLAS_INLINE | |
363 int size1( const M &m ) { | |
364 return m.size1() ; | |
365 } | |
366 template < typename M > | |
367 BOOST_UBLAS_INLINE | |
368 int size2( const M &m ) { | |
369 return m.size2() ; | |
370 } | |
371 | |
372 template < typename M > | |
373 BOOST_UBLAS_INLINE | |
374 int size1( const matrix_reference<M> &m ) { | |
375 return size1( m.expression() ) ; | |
376 } | |
377 template < typename M > | |
378 BOOST_UBLAS_INLINE | |
379 int size2( const matrix_reference<M> &m ) { | |
380 return size2( m.expression() ) ; | |
381 } | |
382 | |
383 template < typename M > | |
384 BOOST_UBLAS_INLINE | |
385 int leading_dimension( const M &m, row_major_tag ) { | |
386 return m.size2() ; | |
387 } | |
388 template < typename M > | |
389 BOOST_UBLAS_INLINE | |
390 int leading_dimension( const M &m, column_major_tag ) { | |
391 return m.size1() ; | |
392 } | |
393 template < typename M > | |
394 BOOST_UBLAS_INLINE | |
395 int leading_dimension( const M &m ) { | |
396 return leading_dimension( m, typename M::orientation_category() ) ; | |
397 } | |
398 | |
399 template < typename M > | |
400 BOOST_UBLAS_INLINE | |
401 int leading_dimension( const matrix_reference<M> &m ) { | |
402 return leading_dimension( m.expression() ) ; | |
403 } | |
404 | |
405 template < typename V > | |
406 BOOST_UBLAS_INLINE | |
407 int stride( const V &v ) { | |
408 return 1 ; | |
409 } | |
410 | |
411 template < typename V > | |
412 BOOST_UBLAS_INLINE | |
413 int stride( const vector_range<V> &v ) { | |
414 return stride( v.data() ) ; | |
415 } | |
416 template < typename V > | |
417 BOOST_UBLAS_INLINE | |
418 int stride( const vector_slice<V> &v ) { | |
419 return v.stride() * stride( v.data() ) ; | |
420 } | |
421 | |
422 template < typename M > | |
423 BOOST_UBLAS_INLINE | |
424 int stride( const matrix_row<M> &v ) { | |
425 return stride2( v.data() ) ; | |
426 } | |
427 template < typename M > | |
428 BOOST_UBLAS_INLINE | |
429 int stride( const matrix_column<M> &v ) { | |
430 return stride1( v.data() ) ; | |
431 } | |
432 | |
433 template < typename M > | |
434 BOOST_UBLAS_INLINE | |
435 int stride1( const M &m ) { | |
436 typedef typename M::functor_type functor_type; | |
437 return functor_type::one1( m.size1(), m.size2() ) ; | |
438 } | |
439 template < typename M > | |
440 BOOST_UBLAS_INLINE | |
441 int stride2( const M &m ) { | |
442 typedef typename M::functor_type functor_type; | |
443 return functor_type::one2( m.size1(), m.size2() ) ; | |
444 } | |
445 | |
446 template < typename M > | |
447 BOOST_UBLAS_INLINE | |
448 int stride1( const matrix_reference<M> &m ) { | |
449 return stride1( m.expression() ) ; | |
450 } | |
451 template < typename M > | |
452 BOOST_UBLAS_INLINE | |
453 int stride2( const matrix_reference<M> &m ) { | |
454 return stride2( m.expression() ) ; | |
455 } | |
456 | |
457 template < typename T, std::size_t M, std::size_t N > | |
458 BOOST_UBLAS_INLINE | |
459 int stride1( const c_matrix<T, M, N> &m ) { | |
460 return N ; | |
461 } | |
462 template < typename T, std::size_t M, std::size_t N > | |
463 BOOST_UBLAS_INLINE | |
464 int stride2( const c_matrix<T, M, N> &m ) { | |
465 return 1 ; | |
466 } | |
467 | |
468 template < typename M > | |
469 BOOST_UBLAS_INLINE | |
470 int stride1( const matrix_range<M> &m ) { | |
471 return stride1( m.data() ) ; | |
472 } | |
473 template < typename M > | |
474 BOOST_UBLAS_INLINE | |
475 int stride1( const matrix_slice<M> &m ) { | |
476 return m.stride1() * stride1( m.data() ) ; | |
477 } | |
478 template < typename M > | |
479 BOOST_UBLAS_INLINE | |
480 int stride2( const matrix_range<M> &m ) { | |
481 return stride2( m.data() ) ; | |
482 } | |
483 template < typename M > | |
484 BOOST_UBLAS_INLINE | |
485 int stride2( const matrix_slice<M> &m ) { | |
486 return m.stride2() * stride2( m.data() ) ; | |
487 } | |
488 | |
489 template < typename MV > | |
490 BOOST_UBLAS_INLINE | |
491 typename MV::array_type::array_type::array_type::const_pointer data( const MV &mv ) { | |
492 return &mv.data().begin()[0] ; | |
493 } | |
494 template < typename MV > | |
495 BOOST_UBLAS_INLINE | |
496 typename MV::array_type::array_type::const_pointer data_const( const MV &mv ) { | |
497 return &mv.data().begin()[0] ; | |
498 } | |
499 template < typename MV > | |
500 BOOST_UBLAS_INLINE | |
501 typename MV::array_type::pointer data( MV &mv ) { | |
502 return &mv.data().begin()[0] ; | |
503 } | |
504 | |
505 | |
506 template < typename V > | |
507 BOOST_UBLAS_INLINE | |
508 typename V::array_type::array_type::const_pointer data( const vector_reference<V> &v ) { | |
509 return data( v.expression () ) ; | |
510 } | |
511 template < typename V > | |
512 BOOST_UBLAS_INLINE | |
513 typename V::array_type::array_type::const_pointer data_const( const vector_reference<V> &v ) { | |
514 return data_const( v.expression () ) ; | |
515 } | |
516 template < typename V > | |
517 BOOST_UBLAS_INLINE | |
518 typename V::array_type::pointer data( vector_reference<V> &v ) { | |
519 return data( v.expression () ) ; | |
520 } | |
521 | |
522 template < typename T, std::size_t N > | |
523 BOOST_UBLAS_INLINE | |
524 typename c_vector<T, N>::array_type::array_type::const_pointer data( const c_vector<T, N> &v ) { | |
525 return v.data() ; | |
526 } | |
527 template < typename T, std::size_t N > | |
528 BOOST_UBLAS_INLINE | |
529 typename c_vector<T, N>::array_type::array_type::const_pointer data_const( const c_vector<T, N> &v ) { | |
530 return v.data() ; | |
531 } | |
532 template < typename T, std::size_t N > | |
533 BOOST_UBLAS_INLINE | |
534 typename c_vector<T, N>::pointer data( c_vector<T, N> &v ) { | |
535 return v.data() ; | |
536 } | |
537 | |
538 template < typename V > | |
539 BOOST_UBLAS_INLINE | |
540 typename V::array_type::array_type::const_pointer data( const vector_range<V> &v ) { | |
541 return data( v.data() ) + v.start() * stride (v.data() ) ; | |
542 } | |
543 template < typename V > | |
544 BOOST_UBLAS_INLINE | |
545 typename V::array_type::array_type::const_pointer data( const vector_slice<V> &v ) { | |
546 return data( v.data() ) + v.start() * stride (v.data() ) ; | |
547 } | |
548 template < typename V > | |
549 BOOST_UBLAS_INLINE | |
550 typename V::array_type::array_type::const_pointer data_const( const vector_range<V> &v ) { | |
551 return data_const( v.data() ) + v.start() * stride (v.data() ) ; | |
552 } | |
553 template < typename V > | |
554 BOOST_UBLAS_INLINE | |
555 typename V::array_type::const_pointer data_const( const vector_slice<V> &v ) { | |
556 return data_const( v.data() ) + v.start() * stride (v.data() ) ; | |
557 } | |
558 template < typename V > | |
559 BOOST_UBLAS_INLINE | |
560 typename V::array_type::pointer data( vector_range<V> &v ) { | |
561 return data( v.data() ) + v.start() * stride (v.data() ) ; | |
562 } | |
563 template < typename V > | |
564 BOOST_UBLAS_INLINE | |
565 typename V::array_type::pointer data( vector_slice<V> &v ) { | |
566 return data( v.data() ) + v.start() * stride (v.data() ) ; | |
567 } | |
568 | |
569 template < typename M > | |
570 BOOST_UBLAS_INLINE | |
571 typename M::array_type::const_pointer data( const matrix_reference<M> &m ) { | |
572 return data( m.expression () ) ; | |
573 } | |
574 template < typename M > | |
575 BOOST_UBLAS_INLINE | |
576 typename M::array_type::const_pointer data_const( const matrix_reference<M> &m ) { | |
577 return data_const( m.expression () ) ; | |
578 } | |
579 template < typename M > | |
580 BOOST_UBLAS_INLINE | |
581 typename M::array_type::pointer data( matrix_reference<M> &m ) { | |
582 return data( m.expression () ) ; | |
583 } | |
584 | |
585 template < typename T, std::size_t M, std::size_t N > | |
586 BOOST_UBLAS_INLINE | |
587 typename c_matrix<T, M, N>::array_type::const_pointer data( const c_matrix<T, M, N> &m ) { | |
588 return m.data() ; | |
589 } | |
590 template < typename T, std::size_t M, std::size_t N > | |
591 BOOST_UBLAS_INLINE | |
592 typename c_matrix<T, M, N>::array_type::const_pointer data_const( const c_matrix<T, M, N> &m ) { | |
593 return m.data() ; | |
594 } | |
595 template < typename T, std::size_t M, std::size_t N > | |
596 BOOST_UBLAS_INLINE | |
597 typename c_matrix<T, M, N>::pointer data( c_matrix<T, M, N> &m ) { | |
598 return m.data() ; | |
599 } | |
600 | |
601 template < typename M > | |
602 BOOST_UBLAS_INLINE | |
603 typename M::array_type::const_pointer data( const matrix_row<M> &v ) { | |
604 return data( v.data() ) + v.index() * stride1( v.data() ) ; | |
605 } | |
606 template < typename M > | |
607 BOOST_UBLAS_INLINE | |
608 typename M::array_type::const_pointer data( const matrix_column<M> &v ) { | |
609 return data( v.data() ) + v.index() * stride2( v.data() ) ; | |
610 } | |
611 template < typename M > | |
612 BOOST_UBLAS_INLINE | |
613 typename M::array_type::const_pointer data_const( const matrix_row<M> &v ) { | |
614 return data_const( v.data() ) + v.index() * stride1( v.data() ) ; | |
615 } | |
616 template < typename M > | |
617 BOOST_UBLAS_INLINE | |
618 typename M::array_type::const_pointer data_const( const matrix_column<M> &v ) { | |
619 return data_const( v.data() ) + v.index() * stride2( v.data() ) ; | |
620 } | |
621 template < typename M > | |
622 BOOST_UBLAS_INLINE | |
623 typename M::array_type::pointer data( matrix_row<M> &v ) { | |
624 return data( v.data() ) + v.index() * stride1( v.data() ) ; | |
625 } | |
626 template < typename M > | |
627 BOOST_UBLAS_INLINE | |
628 typename M::array_type::pointer data( matrix_column<M> &v ) { | |
629 return data( v.data() ) + v.index() * stride2( v.data() ) ; | |
630 } | |
631 | |
632 template < typename M > | |
633 BOOST_UBLAS_INLINE | |
634 typename M::array_type::const_pointer data( const matrix_range<M> &m ) { | |
635 return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
636 } | |
637 template < typename M > | |
638 BOOST_UBLAS_INLINE | |
639 typename M::array_type::const_pointer data( const matrix_slice<M> &m ) { | |
640 return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
641 } | |
642 template < typename M > | |
643 BOOST_UBLAS_INLINE | |
644 typename M::array_type::const_pointer data_const( const matrix_range<M> &m ) { | |
645 return data_const( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
646 } | |
647 template < typename M > | |
648 BOOST_UBLAS_INLINE | |
649 typename M::array_type::const_pointer data_const( const matrix_slice<M> &m ) { | |
650 return data_const( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
651 } | |
652 template < typename M > | |
653 BOOST_UBLAS_INLINE | |
654 typename M::array_type::pointer data( matrix_range<M> &m ) { | |
655 return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
656 } | |
657 template < typename M > | |
658 BOOST_UBLAS_INLINE | |
659 typename M::array_type::pointer data( matrix_slice<M> &m ) { | |
660 return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
661 } | |
662 | |
663 | |
664 template < typename MV > | |
665 BOOST_UBLAS_INLINE | |
666 typename MV::array_type::const_pointer base( const MV &mv ) { | |
667 return &mv.data().begin()[0] ; | |
668 } | |
669 template < typename MV > | |
670 BOOST_UBLAS_INLINE | |
671 typename MV::array_type::const_pointer base_const( const MV &mv ) { | |
672 return &mv.data().begin()[0] ; | |
673 } | |
674 template < typename MV > | |
675 BOOST_UBLAS_INLINE | |
676 typename MV::array_type::pointer base( MV &mv ) { | |
677 return &mv.data().begin()[0] ; | |
678 } | |
679 | |
680 template < typename V > | |
681 BOOST_UBLAS_INLINE | |
682 typename V::array_type::const_pointer base( const vector_reference<V> &v ) { | |
683 return base( v.expression () ) ; | |
684 } | |
685 template < typename V > | |
686 BOOST_UBLAS_INLINE | |
687 typename V::array_type::const_pointer base_const( const vector_reference<V> &v ) { | |
688 return base_const( v.expression () ) ; | |
689 } | |
690 template < typename V > | |
691 BOOST_UBLAS_INLINE | |
692 typename V::array_type::pointer base( vector_reference<V> &v ) { | |
693 return base( v.expression () ) ; | |
694 } | |
695 | |
696 template < typename T, std::size_t N > | |
697 BOOST_UBLAS_INLINE | |
698 typename c_vector<T, N>::array_type::const_pointer base( const c_vector<T, N> &v ) { | |
699 return v.data() ; | |
700 } | |
701 template < typename T, std::size_t N > | |
702 BOOST_UBLAS_INLINE | |
703 typename c_vector<T, N>::array_type::const_pointer base_const( const c_vector<T, N> &v ) { | |
704 return v.data() ; | |
705 } | |
706 template < typename T, std::size_t N > | |
707 BOOST_UBLAS_INLINE | |
708 typename c_vector<T, N>::pointer base( c_vector<T, N> &v ) { | |
709 return v.data() ; | |
710 } | |
711 | |
712 template < typename V > | |
713 BOOST_UBLAS_INLINE | |
714 typename V::array_type::const_pointer base( const vector_range<V> &v ) { | |
715 return base( v.data() ) ; | |
716 } | |
717 template < typename V > | |
718 BOOST_UBLAS_INLINE | |
719 typename V::array_type::const_pointer base( const vector_slice<V> &v ) { | |
720 return base( v.data() ) ; | |
721 } | |
722 template < typename V > | |
723 BOOST_UBLAS_INLINE | |
724 typename V::array_type::const_pointer base_const( const vector_range<V> &v ) { | |
725 return base_const( v.data() ) ; | |
726 } | |
727 template < typename V > | |
728 BOOST_UBLAS_INLINE | |
729 typename V::array_type::const_pointer base_const( const vector_slice<V> &v ) { | |
730 return base_const( v.data() ) ; | |
731 } | |
732 template < typename V > | |
733 BOOST_UBLAS_INLINE | |
734 typename V::array_type::pointer base( vector_range<V> &v ) { | |
735 return base( v.data() ) ; | |
736 } | |
737 template < typename V > | |
738 BOOST_UBLAS_INLINE | |
739 typename V::array_type::pointer base( vector_slice<V> &v ) { | |
740 return base( v.data() ) ; | |
741 } | |
742 | |
743 template < typename M > | |
744 BOOST_UBLAS_INLINE | |
745 typename M::array_type::const_pointer base( const matrix_reference<M> &m ) { | |
746 return base( m.expression () ) ; | |
747 } | |
748 template < typename M > | |
749 BOOST_UBLAS_INLINE | |
750 typename M::array_type::const_pointer base_const( const matrix_reference<M> &m ) { | |
751 return base_const( m.expression () ) ; | |
752 } | |
753 template < typename M > | |
754 BOOST_UBLAS_INLINE | |
755 typename M::array_type::pointer base( matrix_reference<M> &m ) { | |
756 return base( m.expression () ) ; | |
757 } | |
758 | |
759 template < typename T, std::size_t M, std::size_t N > | |
760 BOOST_UBLAS_INLINE | |
761 typename c_matrix<T, M, N>::array_type::const_pointer base( const c_matrix<T, M, N> &m ) { | |
762 return m.data() ; | |
763 } | |
764 template < typename T, std::size_t M, std::size_t N > | |
765 BOOST_UBLAS_INLINE | |
766 typename c_matrix<T, M, N>::array_type::const_pointer base_const( const c_matrix<T, M, N> &m ) { | |
767 return m.data() ; | |
768 } | |
769 template < typename T, std::size_t M, std::size_t N > | |
770 BOOST_UBLAS_INLINE | |
771 typename c_matrix<T, M, N>::pointer base( c_matrix<T, M, N> &m ) { | |
772 return m.data() ; | |
773 } | |
774 | |
775 template < typename M > | |
776 BOOST_UBLAS_INLINE | |
777 typename M::array_type::const_pointer base( const matrix_row<M> &v ) { | |
778 return base( v.data() ) ; | |
779 } | |
780 template < typename M > | |
781 BOOST_UBLAS_INLINE | |
782 typename M::array_type::const_pointer base( const matrix_column<M> &v ) { | |
783 return base( v.data() ) ; | |
784 } | |
785 template < typename M > | |
786 BOOST_UBLAS_INLINE | |
787 typename M::array_type::const_pointer base_const( const matrix_row<M> &v ) { | |
788 return base_const( v.data() ) ; | |
789 } | |
790 template < typename M > | |
791 BOOST_UBLAS_INLINE | |
792 typename M::array_type::const_pointer base_const( const matrix_column<M> &v ) { | |
793 return base_const( v.data() ) ; | |
794 } | |
795 template < typename M > | |
796 BOOST_UBLAS_INLINE | |
797 typename M::array_type::pointer base( matrix_row<M> &v ) { | |
798 return base( v.data() ) ; | |
799 } | |
800 template < typename M > | |
801 BOOST_UBLAS_INLINE | |
802 typename M::array_type::pointer base( matrix_column<M> &v ) { | |
803 return base( v.data() ) ; | |
804 } | |
805 | |
806 template < typename M > | |
807 BOOST_UBLAS_INLINE | |
808 typename M::array_type::const_pointer base( const matrix_range<M> &m ) { | |
809 return base( m.data() ) ; | |
810 } | |
811 template < typename M > | |
812 BOOST_UBLAS_INLINE | |
813 typename M::array_type::const_pointer base( const matrix_slice<M> &m ) { | |
814 return base( m.data() ) ; | |
815 } | |
816 template < typename M > | |
817 BOOST_UBLAS_INLINE | |
818 typename M::array_type::const_pointer base_const( const matrix_range<M> &m ) { | |
819 return base_const( m.data() ) ; | |
820 } | |
821 template < typename M > | |
822 BOOST_UBLAS_INLINE | |
823 typename M::array_type::const_pointer base_const( const matrix_slice<M> &m ) { | |
824 return base_const( m.data() ) ; | |
825 } | |
826 template < typename M > | |
827 BOOST_UBLAS_INLINE | |
828 typename M::array_type::pointer base( matrix_range<M> &m ) { | |
829 return base( m.data() ) ; | |
830 } | |
831 template < typename M > | |
832 BOOST_UBLAS_INLINE | |
833 typename M::array_type::pointer base( matrix_slice<M> &m ) { | |
834 return base( m.data() ) ; | |
835 } | |
836 | |
837 template < typename MV > | |
838 BOOST_UBLAS_INLINE | |
839 typename MV::size_type start( const MV &mv ) { | |
840 return 0 ; | |
841 } | |
842 | |
843 template < typename V > | |
844 BOOST_UBLAS_INLINE | |
845 typename V::size_type start( const vector_range<V> &v ) { | |
846 return v.start() * stride (v.data() ) ; | |
847 } | |
848 template < typename V > | |
849 BOOST_UBLAS_INLINE | |
850 typename V::size_type start( const vector_slice<V> &v ) { | |
851 return v.start() * stride (v.data() ) ; | |
852 } | |
853 | |
854 template < typename M > | |
855 BOOST_UBLAS_INLINE | |
856 typename M::size_type start( const matrix_row<M> &v ) { | |
857 return v.index() * stride1( v.data() ) ; | |
858 } | |
859 template < typename M > | |
860 BOOST_UBLAS_INLINE | |
861 typename M::size_type start( const matrix_column<M> &v ) { | |
862 return v.index() * stride2( v.data() ) ; | |
863 } | |
864 | |
865 template < typename M > | |
866 BOOST_UBLAS_INLINE | |
867 typename M::size_type start( const matrix_range<M> &m ) { | |
868 return m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
869 } | |
870 template < typename M > | |
871 BOOST_UBLAS_INLINE | |
872 typename M::size_type start( const matrix_slice<M> &m ) { | |
873 return m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ; | |
874 } | |
875 | |
876 }}}} | |
877 | |
878 #endif |