]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Boost.Units - A C++ library for zero-overhead dimensional analysis and |
2 | // unit/quantity manipulation and conversion | |
3 | // | |
4 | // Copyright (C) 2003-2008 Matthias Christian Schabel | |
5 | // Copyright (C) 2008 Steven Watanabe | |
6 | // | |
7 | // Distributed under the Boost Software License, Version 1.0. (See | |
8 | // accompanying file LICENSE_1_0.txt or copy at | |
9 | // http://www.boost.org/LICENSE_1_0.txt) | |
10 | ||
11 | #ifndef BOOST_UNITS_DERIVED_DIMENSION_HPP | |
12 | #define BOOST_UNITS_DERIVED_DIMENSION_HPP | |
13 | ||
14 | #include <boost/units/dim.hpp> | |
15 | #include <boost/units/dimension.hpp> | |
16 | #include <boost/units/static_rational.hpp> | |
17 | #include <boost/units/units_fwd.hpp> | |
18 | #include <boost/units/detail/dimension_list.hpp> | |
19 | ||
20 | namespace boost { | |
21 | ||
22 | namespace units { | |
23 | ||
24 | /// A utility class for defining composite dimensions with integer powers. | |
25 | template<class DT1 = dimensionless_type,long E1 = 0, | |
26 | class DT2 = dimensionless_type,long E2 = 0, | |
27 | class DT3 = dimensionless_type,long E3 = 0, | |
28 | class DT4 = dimensionless_type,long E4 = 0, | |
29 | class DT5 = dimensionless_type,long E5 = 0, | |
30 | class DT6 = dimensionless_type,long E6 = 0, | |
31 | class DT7 = dimensionless_type,long E7 = 0, | |
32 | class DT8 = dimensionless_type,long E8 = 0> | |
33 | struct derived_dimension | |
34 | { | |
35 | #ifdef BOOST_UNITS_DOXYGEN | |
36 | typedef detail::unspecified type; | |
37 | #else | |
38 | typedef typename | |
39 | make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
40 | list< dim< DT2,static_rational<E2> >, | |
41 | list< dim< DT3,static_rational<E3> >, | |
42 | list< dim< DT4,static_rational<E4> >, | |
43 | list< dim< DT5,static_rational<E5> >, | |
44 | list< dim< DT6,static_rational<E6> >, | |
45 | list< dim< DT7,static_rational<E7> >, | |
46 | list< dim< DT8,static_rational<E8> >, dimensionless_type > > > > > > > > >::type type; | |
47 | #endif | |
48 | }; | |
49 | ||
50 | /// INTERNAL ONLY | |
51 | template<class DT1,long E1> | |
52 | struct derived_dimension< | |
53 | DT1, E1, | |
54 | dimensionless_type,0, | |
55 | dimensionless_type,0, | |
56 | dimensionless_type,0, | |
57 | dimensionless_type,0, | |
58 | dimensionless_type,0, | |
59 | dimensionless_type,0, | |
60 | dimensionless_type,0> | |
61 | { | |
62 | typedef typename | |
63 | make_dimension_list< list< dim< DT1,static_rational<E1> >, dimensionless_type > >::type type; | |
64 | }; | |
65 | ||
66 | /// INTERNAL ONLY | |
67 | template<class DT1,long E1, | |
68 | class DT2,long E2> | |
69 | struct derived_dimension< | |
70 | DT1, E1, | |
71 | DT2, E2, | |
72 | dimensionless_type,0, | |
73 | dimensionless_type,0, | |
74 | dimensionless_type,0, | |
75 | dimensionless_type,0, | |
76 | dimensionless_type,0, | |
77 | dimensionless_type,0> | |
78 | { | |
79 | typedef typename | |
80 | make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
81 | list< dim< DT2,static_rational<E2> >, dimensionless_type > > >::type type; | |
82 | }; | |
83 | ||
84 | /// INTERNAL ONLY | |
85 | template<class DT1,long E1, | |
86 | class DT2,long E2, | |
87 | class DT3,long E3> | |
88 | struct derived_dimension< | |
89 | DT1, E1, | |
90 | DT2, E2, | |
91 | DT3, E3, | |
92 | dimensionless_type,0, | |
93 | dimensionless_type,0, | |
94 | dimensionless_type,0, | |
95 | dimensionless_type,0, | |
96 | dimensionless_type,0> | |
97 | { | |
98 | typedef typename | |
99 | make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
100 | list< dim< DT2,static_rational<E2> >, | |
101 | list< dim< DT3,static_rational<E3> >, dimensionless_type > > > >::type type; | |
102 | }; | |
103 | ||
104 | /// INTERNAL ONLY | |
105 | template<class DT1,long E1, | |
106 | class DT2,long E2, | |
107 | class DT3,long E3, | |
108 | class DT4,long E4> | |
109 | struct derived_dimension< | |
110 | DT1, E1, | |
111 | DT2, E2, | |
112 | DT3, E3, | |
113 | DT4, E4, | |
114 | dimensionless_type,0, | |
115 | dimensionless_type,0, | |
116 | dimensionless_type,0, | |
117 | dimensionless_type,0> | |
118 | { | |
119 | typedef typename | |
120 | make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
121 | list< dim< DT2,static_rational<E2> >, | |
122 | list< dim< DT3,static_rational<E3> >, | |
123 | list< dim< DT4,static_rational<E4> >, dimensionless_type > > > > >::type type; | |
124 | }; | |
125 | ||
126 | /// INTERNAL ONLY | |
127 | template<class DT1,long E1, | |
128 | class DT2,long E2, | |
129 | class DT3,long E3, | |
130 | class DT4,long E4, | |
131 | class DT5,long E5> | |
132 | struct derived_dimension< | |
133 | DT1, E1, | |
134 | DT2, E2, | |
135 | DT3, E3, | |
136 | DT4, E4, | |
137 | DT5, E5, | |
138 | dimensionless_type,0, | |
139 | dimensionless_type,0, | |
140 | dimensionless_type,0> | |
141 | { | |
142 | typedef typename | |
143 | make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
144 | list< dim< DT2,static_rational<E2> >, | |
145 | list< dim< DT3,static_rational<E3> >, | |
146 | list< dim< DT4,static_rational<E4> >, | |
147 | list< dim< DT5,static_rational<E5> >, dimensionless_type > > > > > >::type type; | |
148 | }; | |
149 | ||
150 | /// INTERNAL ONLY | |
151 | template<class DT1,long E1, | |
152 | class DT2,long E2, | |
153 | class DT3,long E3, | |
154 | class DT4,long E4, | |
155 | class DT5,long E5, | |
156 | class DT6,long E6> | |
157 | struct derived_dimension< | |
158 | DT1, E1, | |
159 | DT2, E2, | |
160 | DT3, E3, | |
161 | DT4, E4, | |
162 | DT5, E5, | |
163 | DT6, E6, | |
164 | dimensionless_type,0, | |
165 | dimensionless_type,0> | |
166 | { | |
167 | typedef typename | |
168 | make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
169 | list< dim< DT2,static_rational<E2> >, | |
170 | list< dim< DT3,static_rational<E3> >, | |
171 | list< dim< DT4,static_rational<E4> >, | |
172 | list< dim< DT5,static_rational<E5> >, | |
173 | list< dim< DT6,static_rational<E6> >, dimensionless_type > > > > > > >::type type; | |
174 | }; | |
175 | ||
176 | /// INTERNAL ONLY | |
177 | template<class DT1,long E1, | |
178 | class DT2,long E2, | |
179 | class DT3,long E3, | |
180 | class DT4,long E4, | |
181 | class DT5,long E5, | |
182 | class DT6,long E6, | |
183 | class DT7,long E7> | |
184 | struct derived_dimension< | |
185 | DT1, E1, | |
186 | DT2, E2, | |
187 | DT3, E3, | |
188 | DT4, E4, | |
189 | DT5, E5, | |
190 | DT6, E6, | |
191 | DT7, E7, | |
192 | dimensionless_type,0> | |
193 | { | |
194 | typedef typename | |
195 | make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
196 | list< dim< DT2,static_rational<E2> >, | |
197 | list< dim< DT3,static_rational<E3> >, | |
198 | list< dim< DT4,static_rational<E4> >, | |
199 | list< dim< DT5,static_rational<E5> >, | |
200 | list< dim< DT6,static_rational<E6> >, | |
201 | list< dim< DT7,static_rational<E7> >, dimensionless_type > > > > > > > >::type type; | |
202 | }; | |
203 | ||
204 | } // namespace units | |
205 | ||
206 | } // namespace boost | |
207 | ||
208 | #endif // BOOST_UNITS_DERIVED_DIMENSION_HPP |