New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
raw.hpp in vendors/XIOS/current/extern/boost/include/boost/numeric/ublas/detail – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/numeric/ublas/detail/raw.hpp @ 3408

Last change on this file since 3408 was 3408, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

  • Property svn:keywords set to Id
File size: 29.6 KB
Line 
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
14namespace 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
Note: See TracBrowser for help on using the repository browser.