comparison gcc/ada/libgnat/s-digemk.ads @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children 1830386684a0
comparison
equal deleted inserted replaced
111:04ced10e8804 131:84e7813d76e9
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT RUN-TIME COMPONENTS --
4 -- --
5 -- S Y S T E M . D I M . G E N E R I C _ M K S --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 2011-2018, Free Software Foundation, Inc. --
10 -- --
11 -- GNAT is free software; you can redistribute it and/or modify it under --
12 -- terms of the GNU General Public License as published by the Free Soft- --
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
17 -- --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception, --
20 -- version 3.1, as published by the Free Software Foundation. --
21 -- --
22 -- You should have received a copy of the GNU General Public License and --
23 -- a copy of the GCC Runtime Library Exception along with this program; --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
25 -- <http://www.gnu.org/licenses/>. --
26 -- --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
29 -- --
30 ------------------------------------------------------------------------------
31
32 -- Defines the MKS dimension system which is the SI system of units
33
34 -- Some other prefixes of this system are defined in a child package (see
35 -- System.Dim.Generic_Mks.Generic_Other_Prefixes) in order to avoid too many
36 -- constant declarations in this package.
37
38 -- The dimension terminology is defined in System.Dim package
39
40 with Ada.Numerics;
41
42 generic
43 type Float_Type is digits <>;
44
45 package System.Dim.Generic_Mks is
46
47 e : constant := Ada.Numerics.e;
48 Pi : constant := Ada.Numerics.Pi;
49
50 -- Dimensioned type Mks_Type
51
52 type Mks_Type is new Float_Type
53 with
54 Dimension_System => (
55 (Unit_Name => Meter, Unit_Symbol => 'm', Dim_Symbol => 'L'),
56 (Unit_Name => Kilogram, Unit_Symbol => "kg", Dim_Symbol => 'M'),
57 (Unit_Name => Second, Unit_Symbol => 's', Dim_Symbol => 'T'),
58 (Unit_Name => Ampere, Unit_Symbol => 'A', Dim_Symbol => 'I'),
59 (Unit_Name => Kelvin, Unit_Symbol => 'K', Dim_Symbol => '@'),
60 (Unit_Name => Mole, Unit_Symbol => "mol", Dim_Symbol => 'N'),
61 (Unit_Name => Candela, Unit_Symbol => "cd", Dim_Symbol => 'J'));
62
63 -- SI Base dimensioned subtypes
64
65 subtype Length is Mks_Type
66 with
67 Dimension => (Symbol => 'm',
68 Meter => 1,
69 others => 0);
70
71 subtype Mass is Mks_Type
72 with
73 Dimension => (Symbol => "kg",
74 Kilogram => 1,
75 others => 0);
76
77 subtype Time is Mks_Type
78 with
79 Dimension => (Symbol => 's',
80 Second => 1,
81 others => 0);
82
83 subtype Electric_Current is Mks_Type
84 with
85 Dimension => (Symbol => 'A',
86 Ampere => 1,
87 others => 0);
88
89 subtype Thermodynamic_Temperature is Mks_Type
90 with
91 Dimension => (Symbol => 'K',
92 Kelvin => 1,
93 others => 0);
94
95 subtype Amount_Of_Substance is Mks_Type
96 with
97 Dimension => (Symbol => "mol",
98 Mole => 1,
99 others => 0);
100
101 subtype Luminous_Intensity is Mks_Type
102 with
103 Dimension => (Symbol => "cd",
104 Candela => 1,
105 others => 0);
106
107 -- Initialize SI Base unit values
108
109 -- Turn off the all the dimension warnings for these basic assignments
110 -- since otherwise we would get complaints about assigning dimensionless
111 -- values to dimensioned subtypes (we can't assign 1.0*m to m).
112
113 pragma Warnings (Off, "*assumed to be*");
114
115 m : constant Length := 1.0;
116 kg : constant Mass := 1.0;
117 s : constant Time := 1.0;
118 A : constant Electric_Current := 1.0;
119 K : constant Thermodynamic_Temperature := 1.0;
120 mol : constant Amount_Of_Substance := 1.0;
121 cd : constant Luminous_Intensity := 1.0;
122
123 pragma Warnings (On, "*assumed to be*");
124
125 -- SI Derived dimensioned subtypes
126
127 subtype Absorbed_Dose is Mks_Type
128 with
129 Dimension => (Symbol => "Gy",
130 Meter => 2,
131 Second => -2,
132 others => 0);
133
134 subtype Angle is Mks_Type
135 with
136 Dimension => (Symbol => "rad",
137 others => 0);
138
139 subtype Area is Mks_Type
140 with
141 Dimension => (
142 Meter => 2,
143 others => 0);
144
145 subtype Catalytic_Activity is Mks_Type
146 with
147 Dimension => (Symbol => "kat",
148 Second => -1,
149 Mole => 1,
150 others => 0);
151
152 subtype Celsius_Temperature is Mks_Type
153 with
154 Dimension => (Symbol => "°C",
155 Kelvin => 1,
156 others => 0);
157
158 subtype Electric_Capacitance is Mks_Type
159 with
160 Dimension => (Symbol => 'F',
161 Meter => -2,
162 Kilogram => -1,
163 Second => 4,
164 Ampere => 2,
165 others => 0);
166
167 subtype Electric_Charge is Mks_Type
168 with
169 Dimension => (Symbol => 'C',
170 Second => 1,
171 Ampere => 1,
172 others => 0);
173
174 subtype Electric_Conductance is Mks_Type
175 with
176 Dimension => (Symbol => 'S',
177 Meter => -2,
178 Kilogram => -1,
179 Second => 3,
180 Ampere => 2,
181 others => 0);
182
183 subtype Electric_Potential_Difference is Mks_Type
184 with
185 Dimension => (Symbol => 'V',
186 Meter => 2,
187 Kilogram => 1,
188 Second => -3,
189 Ampere => -1,
190 others => 0);
191
192 -- Note the type punning below. The Symbol is a single "ohm" character
193 -- encoded in UTF-8 (ce a9 in hexadecimal), but this file is not compiled
194 -- with -gnatW8, so we're treating the string literal as a two-character
195 -- String.
196
197 subtype Electric_Resistance is Mks_Type
198 with
199 Dimension => (Symbol => "Ω",
200 Meter => 2,
201 Kilogram => 1,
202 Second => -3,
203 Ampere => -2,
204 others => 0);
205
206 subtype Energy is Mks_Type
207 with
208 Dimension => (Symbol => 'J',
209 Meter => 2,
210 Kilogram => 1,
211 Second => -2,
212 others => 0);
213
214 subtype Equivalent_Dose is Mks_Type
215 with
216 Dimension => (Symbol => "Sv",
217 Meter => 2,
218 Second => -2,
219 others => 0);
220
221 subtype Force is Mks_Type
222 with
223 Dimension => (Symbol => 'N',
224 Meter => 1,
225 Kilogram => 1,
226 Second => -2,
227 others => 0);
228
229 subtype Frequency is Mks_Type
230 with
231 Dimension => (Symbol => "Hz",
232 Second => -1,
233 others => 0);
234
235 subtype Illuminance is Mks_Type
236 with
237 Dimension => (Symbol => "lx",
238 Meter => -2,
239 Candela => 1,
240 others => 0);
241
242 subtype Inductance is Mks_Type
243 with
244 Dimension => (Symbol => 'H',
245 Meter => 2,
246 Kilogram => 1,
247 Second => -2,
248 Ampere => -2,
249 others => 0);
250
251 subtype Luminous_Flux is Mks_Type
252 with
253 Dimension => (Symbol => "lm",
254 Candela => 1,
255 others => 0);
256
257 subtype Magnetic_Flux is Mks_Type
258 with
259 Dimension => (Symbol => "Wb",
260 Meter => 2,
261 Kilogram => 1,
262 Second => -2,
263 Ampere => -1,
264 others => 0);
265
266 subtype Magnetic_Flux_Density is Mks_Type
267 with
268 Dimension => (Symbol => 'T',
269 Kilogram => 1,
270 Second => -2,
271 Ampere => -1,
272 others => 0);
273
274 subtype Power is Mks_Type
275 with
276 Dimension => (Symbol => 'W',
277 Meter => 2,
278 Kilogram => 1,
279 Second => -3,
280 others => 0);
281
282 subtype Pressure is Mks_Type
283 with
284 Dimension => (Symbol => "Pa",
285 Meter => -1,
286 Kilogram => 1,
287 Second => -2,
288 others => 0);
289
290 subtype Radioactivity is Mks_Type
291 with
292 Dimension => (Symbol => "Bq",
293 Second => -1,
294 others => 0);
295
296 subtype Solid_Angle is Mks_Type
297 with
298 Dimension => (Symbol => "sr",
299 others => 0);
300
301 subtype Speed is Mks_Type
302 with
303 Dimension => (
304 Meter => 1,
305 Second => -1,
306 others => 0);
307
308 subtype Volume is Mks_Type
309 with
310 Dimension => (
311 Meter => 3,
312 others => 0);
313
314 -- Initialize derived dimension values
315
316 -- Turn off the all the dimension warnings for these basic assignments
317 -- since otherwise we would get complaints about assigning dimensionless
318 -- values to dimensioned subtypes.
319
320 pragma Warnings (Off, "*assumed to be*");
321
322 rad : constant Angle := 1.0;
323 sr : constant Solid_Angle := 1.0;
324 Hz : constant Frequency := 1.0;
325 N : constant Force := 1.0;
326 Pa : constant Pressure := 1.0;
327 J : constant Energy := 1.0;
328 W : constant Power := 1.0;
329 C : constant Electric_Charge := 1.0;
330 V : constant Electric_Potential_Difference := 1.0;
331 F : constant Electric_Capacitance := 1.0;
332 Ohm : constant Electric_Resistance := 1.0;
333 Si : constant Electric_Conductance := 1.0;
334 Wb : constant Magnetic_Flux := 1.0;
335 T : constant Magnetic_Flux_Density := 1.0;
336 H : constant Inductance := 1.0;
337 dC : constant Celsius_Temperature := 273.15;
338 lm : constant Luminous_Flux := 1.0;
339 lx : constant Illuminance := 1.0;
340 Bq : constant Radioactivity := 1.0;
341 Gy : constant Absorbed_Dose := 1.0;
342 Sv : constant Equivalent_Dose := 1.0;
343 kat : constant Catalytic_Activity := 1.0;
344
345 -- SI prefixes for Meter
346
347 um : constant Length := 1.0E-06; -- micro (u)
348 mm : constant Length := 1.0E-03; -- milli
349 cm : constant Length := 1.0E-02; -- centi
350 dm : constant Length := 1.0E-01; -- deci
351 dam : constant Length := 1.0E+01; -- deka
352 hm : constant Length := 1.0E+02; -- hecto
353 km : constant Length := 1.0E+03; -- kilo
354 Mem : constant Length := 1.0E+06; -- mega
355
356 -- SI prefixes for Kilogram
357
358 ug : constant Mass := 1.0E-09; -- micro (u)
359 mg : constant Mass := 1.0E-06; -- milli
360 cg : constant Mass := 1.0E-05; -- centi
361 dg : constant Mass := 1.0E-04; -- deci
362 g : constant Mass := 1.0E-03; -- gram
363 dag : constant Mass := 1.0E-02; -- deka
364 hg : constant Mass := 1.0E-01; -- hecto
365 Meg : constant Mass := 1.0E+03; -- mega
366
367 -- SI prefixes for Second
368
369 us : constant Time := 1.0E-06; -- micro (u)
370 ms : constant Time := 1.0E-03; -- milli
371 cs : constant Time := 1.0E-02; -- centi
372 ds : constant Time := 1.0E-01; -- deci
373 das : constant Time := 1.0E+01; -- deka
374 hs : constant Time := 1.0E+02; -- hecto
375 ks : constant Time := 1.0E+03; -- kilo
376 Mes : constant Time := 1.0E+06; -- mega
377
378 -- Other constants for Second
379
380 min : constant Time := 60.0 * s;
381 hour : constant Time := 60.0 * min;
382 day : constant Time := 24.0 * hour;
383 year : constant Time := 365.25 * day;
384
385 -- SI prefixes for Ampere
386
387 mA : constant Electric_Current := 1.0E-03; -- milli
388 cA : constant Electric_Current := 1.0E-02; -- centi
389 dA : constant Electric_Current := 1.0E-01; -- deci
390 daA : constant Electric_Current := 1.0E+01; -- deka
391 hA : constant Electric_Current := 1.0E+02; -- hecto
392 kA : constant Electric_Current := 1.0E+03; -- kilo
393 MeA : constant Electric_Current := 1.0E+06; -- mega
394
395 pragma Warnings (On, "*assumed to be*");
396 end System.Dim.Generic_Mks;