]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/numeric/odeint/algebra/vector_space_algebra.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / numeric / odeint / algebra / vector_space_algebra.hpp
1 /*
2 [auto_generated]
3 boost/numeric/odeint/algebra/vector_space_algebra.hpp
4
5 [begin_description]
6 An algebra for types which have vector space semantics, hence types on which the operators +,-,* are well defined.
7 [end_description]
8
9 Copyright 2010-2012 Karsten Ahnert
10 Copyright 2010-2013 Mario Mulansky
11
12 Distributed under the Boost Software License, Version 1.0.
13 (See accompanying file LICENSE_1_0.txt or
14 copy at http://www.boost.org/LICENSE_1_0.txt)
15 */
16
17
18 #ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
19 #define BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
20
21 #include <complex>
22
23 #include <boost/type_traits/remove_reference.hpp>
24
25
26 namespace boost {
27 namespace numeric {
28 namespace odeint {
29
30 /*
31 * This class template has to be overload in order to call vector_space_algebra::norm_inf
32 */
33 template< class State > struct vector_space_norm_inf;
34
35 /*
36 * Example: instantiation for sole doubles and complex
37 */
38 template<>
39 struct vector_space_norm_inf< double >
40 {
41 typedef double result_type;
42 double operator()( double x ) const
43 {
44 using std::abs;
45 return abs(x);
46 }
47 };
48
49 template<>
50 struct vector_space_norm_inf< float >
51 {
52 typedef float result_type;
53 result_type operator()( float x ) const
54 {
55 using std::abs;
56 return abs(x);
57 }
58 };
59
60 template< typename T >
61 struct vector_space_norm_inf< std::complex<T> >
62 {
63 typedef T result_type;
64 result_type operator()( std::complex<T> x ) const
65 {
66 using std::abs;
67 return abs( x );
68 }
69 };
70
71 struct vector_space_algebra
72 {
73 template< class S1 , class Op >
74 static void for_each1( S1 &s1 , Op op )
75 {
76 // ToDo : build checks, that the +-*/ operators are well defined
77 op( s1 );
78 }
79
80 template< class S1 , class S2 , class Op >
81 static void for_each2( S1 &s1 , S2 &s2 , Op op )
82 {
83 op( s1 , s2 );
84 }
85
86 template< class S1 , class S2 , class S3 , class Op >
87 static void for_each3( S1 &s1 , S2 &s2 , S3 &s3 , Op op )
88 {
89 op( s1 , s2 , s3 );
90 }
91
92 template< class S1 , class S2 , class S3 , class S4 , class Op >
93 static void for_each4( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op )
94 {
95 op( s1 , s2 , s3 , s4 );
96 }
97
98 template< class S1 , class S2 , class S3 , class S4 , class S5 , class Op >
99 static void for_each5( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op )
100 {
101 op( s1 , s2 , s3 , s4 , s5 );
102 }
103
104 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op >
105 static void for_each6( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op )
106 {
107 op( s1 , s2 , s3 , s4 , s5 , s6 );
108 }
109
110 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class Op >
111 static void for_each7( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op )
112 {
113 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 );
114 }
115
116 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class Op >
117 static void for_each8( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op )
118 {
119 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 );
120 }
121
122 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class Op >
123 static void for_each9( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op )
124 {
125 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 );
126 }
127
128 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class Op >
129 static void for_each10( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op )
130 {
131 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 );
132 }
133
134 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class Op >
135 static void for_each11( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op )
136 {
137 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 );
138 }
139
140 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op >
141 static void for_each12( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op )
142 {
143 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 );
144 }
145
146 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op >
147 static void for_each13( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op )
148 {
149 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 );
150 }
151
152 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op >
153 static void for_each14( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op )
154 {
155 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 );
156 }
157
158 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class S15 , class Op >
159 static void for_each15( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , S15 &s15 , Op op )
160 {
161 op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 );
162 }
163
164 template< class S >
165 static typename boost::numeric::odeint::vector_space_norm_inf< S >::result_type norm_inf( const S &s )
166 {
167 boost::numeric::odeint::vector_space_norm_inf< S > n;
168 return n( s );
169 }
170 };
171
172
173 } // odeint
174 } // numeric
175 } // boost
176
177
178 #endif // BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED