+2018-08-21 Yannick Moy <moy@adacore.com>
+
+ * doc/gnat_ugn/gnat_and_program_execution.rst: Update
+ documentation of dimensionality analysis.
+ * gnat_ugn.texi: Regenerate.
+ * Makefile.rtl, impunit.adb: Consider the new units.
+ * libgnat/s-dfmkio.ads, libgnat/s-dfmopr.ads,
+ libgnat/s-diflmk.ads: New units based on Float.
+ * libgnat/s-dilomk.ads, libgnat/s-dlmkio.ads,
+ libgnat/s-dlmopr.ads: New units based on Long_Float.
+ * libgnat/s-dmotpr.ads: Rename to libgnat/s-dgmgop.ads and turn
+ into an instance of
+ System.Dim.Generic_Mks.Generic_Other_Prefixes.
+ * libgnat/s-dimmks.ads: Rename to libgnat/s-digemk.ads and turn
+ into an instance of System.Dim.Generic_Mks.
+
2018-08-21 Hristian Kirtchev <kirtchev@adacore.com>
* impunit.adb: Add g-lists to the set of non-implementation
s-conca9$(objext) \
s-crc32$(objext) \
s-crtl$(objext) \
+ s-dfmkio$(objext) \
+ s-dfmopr$(objext) \
+ s-dgmgop$(objext) \
+ s-dlmopr$(objext) \
s-diflio$(objext) \
+ s-diflmk$(objext) \
+ s-digemk$(objext) \
s-diinio$(objext) \
+ s-dilomk$(objext) \
s-dim$(objext) \
s-dimkio$(objext) \
s-dimmks$(objext) \
s-direio$(objext) \
+ s-dlmkio$(objext) \
s-dmotpr$(objext) \
s-dsaser$(objext) \
s-elaall$(objext) \
s-memory.o : s-memory.adb s-memory.ads
$(ADAC) -c $(ALL_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) \
$< $(OUTPUT_OPTION)
-
.. index:: MKS_Type type
The simplest way to impose dimensionality checking on a computation is to make
-use of the package ``System.Dim.Mks``,
-which is part of the GNAT library. This
-package defines a floating-point type ``MKS_Type``,
-for which a sequence of
-dimension names are specified, together with their conventional abbreviations.
-The following should be read together with the full specification of the
-package, in file :file:`s-dimmks.ads`.
+use of one of the instantiations of the package ``System.Dim.Generic_Mks``, which
+are part of the GNAT library. This generic package defines a floating-point
+type ``MKS_Type``, for which a sequence of dimension names are specified,
+together with their conventional abbreviations. The following should be read
+together with the full specification of the package, in file
+:file:`s-digemk.ads`.
- .. index:: s-dimmks.ads file
+ .. index:: s-digemk.ads file
.. code-block:: ada
- type Mks_Type is new Long_Long_Float
+ type Mks_Type is new Float_Type
with
Dimension_System => (
(Unit_Name => Meter, Unit_Symbol => 'm', Dim_Symbol => 'L'),
day : constant Time := 60.0 * 24.0 * min;
...
-Using this package, you can then define a derived unit by
-providing the aspect that
-specifies its dimensions within the MKS system, as well as the string to
-be used for output of a value of that unit:
+There are three instantiations of ``System.Dim.Generic_Mks`` defined in the
+GNAT library:
+
+* ``System.Dim.Float_Mks`` based on ``Float`` defined in :file:`s-diflmk.ads`.
+* ``System.Dim.Long_Mks`` based on ``Long_Float`` defined in :file:`s-dilomk.ads`.
+* ``System.Dim.Mks`` based on ``Long_Long_Float`` defined in :file:`s-dimmks.ads`.
+
+Using one of these packages, you can then define a derived unit by providing
+the aspect that specifies its dimensions within the MKS system, as well as the
+string to be used for output of a value of that unit:
.. code-block:: ada
@copying
@quotation
-GNAT User's Guide for Native Platforms , Jul 13, 2018
+GNAT User's Guide for Native Platforms , Aug 17, 2018
AdaCore
@geindex MKS_Type type
The simplest way to impose dimensionality checking on a computation is to make
-use of the package @code{System.Dim.Mks},
-which is part of the GNAT library. This
-package defines a floating-point type @code{MKS_Type},
-for which a sequence of
-dimension names are specified, together with their conventional abbreviations.
-The following should be read together with the full specification of the
-package, in file @code{s-dimmks.ads}.
+use of one of the instantiations of the package @code{System.Dim.Generic_Mks}, which
+are part of the GNAT library. This generic package defines a floating-point
+type @code{MKS_Type}, for which a sequence of dimension names are specified,
+together with their conventional abbreviations. The following should be read
+together with the full specification of the package, in file
+@code{s-digemk.ads}.
@quotation
-@geindex s-dimmks.ads file
+@geindex s-digemk.ads file
@example
-type Mks_Type is new Long_Long_Float
+type Mks_Type is new Float_Type
with
Dimension_System => (
(Unit_Name => Meter, Unit_Symbol => 'm', Dim_Symbol => 'L'),
@end example
@end quotation
-Using this package, you can then define a derived unit by
-providing the aspect that
-specifies its dimensions within the MKS system, as well as the string to
-be used for output of a value of that unit:
+There are three instantiations of @code{System.Dim.Generic_Mks} defined in the
+GNAT library:
+
+
+@itemize *
+
+@item
+@code{System.Dim.Float_Mks} based on @code{Float} defined in @code{s-diflmk.ads}.
+
+@item
+@code{System.Dim.Long_Mks} based on @code{Long_Float} defined in @code{s-dilomk.ads}.
+
+@item
+@code{System.Dim.Mks} based on @code{Long_Long_Float} defined in @code{s-dimmks.ads}.
+@end itemize
+
+Using one of these packages, you can then define a derived unit by providing
+the aspect that specifies its dimensions within the MKS system, as well as the
+string to be used for output of a value of that unit:
@quotation
("s-addima", F), -- System.Address_Image
("s-atocou", F), -- System.Atomic_Counters
("s-assert", F), -- System.Assertions
+ ("s-dfmkio", F), -- System.Dim.Float_Mks_IO
+ ("s-dfmopr", F), -- System.Dim.Float_Mks.Other_Prefixes
+ ("s-dgmgop", F), -- System.Dim.Generic_Mks.Generic_Other_Prefixes
+ ("s-dlmopr", F), -- System.Dim.Long_Mks.Other_Prefixes
("s-diflio", F), -- System.Dim.Float_IO
+ ("s-diflmk", F), -- System.Dim.Float_Mks
+ ("s-digemk", F), -- System.Dim.Generic_Mks
("s-diinio", F), -- System.Dim.Integer_IO
+ ("s-dilomk", F), -- System.Dim.Long_Mks
("s-dimkio", F), -- System.Dim.Mks_IO
("s-dimmks", F), -- System.Dim.Mks
+ ("s-dlmkio", F), -- System.Dim.Long_Mks_IO
("s-dmotpr", F), -- System.Dim.Mks.Other_Prefixes
("s-memory", F), -- System.Memory
("s-parint", F), -- System.Partition_Interface
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . F L O A T _ M K S _ I O --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- Provides output facilities for the Float MKS dimension system (see
+-- System.Dim.Float_Mks and System.Dim.Float_IO).
+
+with System.Dim.Float_Mks; use System.Dim.Float_Mks;
+with System.Dim.Float_IO;
+
+package System.Dim.Float_Mks_IO is new System.Dim.Float_IO (Mks_Type);
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . F L O A T _ M K S . O T H E R _ P R E F I X E S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks.Generic_Other_Prefixes;
+
+package System.Dim.Float_Mks.Other_Prefixes is
+ new System.Dim.Float_Mks.Generic_Other_Prefixes;
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . G E N E R I C _ M K S --
+-- . G E N E R I C _ O T H E R _ P R E F I X E S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2011-2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- Package that defines some other prefixes for the MKS base unit system.
+
+-- These prefixes have been defined in a child package in order to avoid too
+-- many constant declarations in System.Dim.Generic_Mks.
+
+generic
+package System.Dim.Generic_Mks.Generic_Other_Prefixes is
+
+ -- SI prefixes for Meter
+
+ pragma Warnings (Off);
+ -- Turn off the all the dimension warnings
+
+ ym : constant Length := 1.0E-24; -- yocto
+ zm : constant Length := 1.0E-21; -- zepto
+ am : constant Length := 1.0E-18; -- atto
+ fm : constant Length := 1.0E-15; -- femto
+ pm : constant Length := 1.0E-12; -- pico
+ nm : constant Length := 1.0E-09; -- nano
+ Gm : constant Length := 1.0E+09; -- giga
+ Tm : constant Length := 1.0E+12; -- tera
+ Pem : constant Length := 1.0E+15; -- peta
+ Em : constant Length := 1.0E+18; -- exa
+ Zem : constant Length := 1.0E+21; -- zetta
+ Yom : constant Length := 1.0E+24; -- yotta
+
+ -- SI prefixes for Kilogram
+
+ yg : constant Mass := 1.0E-27; -- yocto
+ zg : constant Mass := 1.0E-24; -- zepto
+ ag : constant Mass := 1.0E-21; -- atto
+ fg : constant Mass := 1.0E-18; -- femto
+ pg : constant Mass := 1.0E-15; -- pico
+ ng : constant Mass := 1.0E-12; -- nano
+ Gg : constant Mass := 1.0E+06; -- giga
+ Tg : constant Mass := 1.0E+09; -- tera
+ Peg : constant Mass := 1.0E+13; -- peta
+ Eg : constant Mass := 1.0E+15; -- exa
+ Zeg : constant Mass := 1.0E+18; -- zetta
+ Yog : constant Mass := 1.0E+21; -- yotta
+
+ -- SI prefixes for Second
+
+ ys : constant Time := 1.0E-24; -- yocto
+ zs : constant Time := 1.0E-21; -- zepto
+ as : constant Time := 1.0E-18; -- atto
+ fs : constant Time := 1.0E-15; -- femto
+ ps : constant Time := 1.0E-12; -- pico
+ ns : constant Time := 1.0E-09; -- nano
+ Gs : constant Time := 1.0E+09; -- giga
+ Ts : constant Time := 1.0E+12; -- tera
+ Pes : constant Time := 1.0E+15; -- peta
+ Es : constant Time := 1.0E+18; -- exa
+ Zes : constant Time := 1.0E+21; -- zetta
+ Yos : constant Time := 1.0E+24; -- yotta
+
+ -- SI prefixes for Ampere
+
+ yA : constant Electric_Current := 1.0E-24; -- yocto
+ zA : constant Electric_Current := 1.0E-21; -- zepto
+ aA : constant Electric_Current := 1.0E-18; -- atto
+ fA : constant Electric_Current := 1.0E-15; -- femto
+ nA : constant Electric_Current := 1.0E-09; -- nano
+ uA : constant Electric_Current := 1.0E-06; -- micro (u)
+ GA : constant Electric_Current := 1.0E+09; -- giga
+ TA : constant Electric_Current := 1.0E+12; -- tera
+ PeA : constant Electric_Current := 1.0E+15; -- peta
+ EA : constant Electric_Current := 1.0E+18; -- exa
+ ZeA : constant Electric_Current := 1.0E+21; -- zetta
+ YoA : constant Electric_Current := 1.0E+24; -- yotta
+
+ -- SI prefixes for Kelvin
+
+ yK : constant Thermodynamic_Temperature := 1.0E-24; -- yocto
+ zK : constant Thermodynamic_Temperature := 1.0E-21; -- zepto
+ aK : constant Thermodynamic_Temperature := 1.0E-18; -- atto
+ fK : constant Thermodynamic_Temperature := 1.0E-15; -- femto
+ pK : constant Thermodynamic_Temperature := 1.0E-12; -- pico
+ nK : constant Thermodynamic_Temperature := 1.0E-09; -- nano
+ uK : constant Thermodynamic_Temperature := 1.0E-06; -- micro (u)
+ mK : constant Thermodynamic_Temperature := 1.0E-03; -- milli
+ cK : constant Thermodynamic_Temperature := 1.0E-02; -- centi
+ dK : constant Thermodynamic_Temperature := 1.0E-01; -- deci
+ daK : constant Thermodynamic_Temperature := 1.0E+01; -- deka
+ hK : constant Thermodynamic_Temperature := 1.0E+02; -- hecto
+ kK : constant Thermodynamic_Temperature := 1.0E+03; -- kilo
+ MeK : constant Thermodynamic_Temperature := 1.0E+06; -- mega
+ GK : constant Thermodynamic_Temperature := 1.0E+09; -- giga
+ TK : constant Thermodynamic_Temperature := 1.0E+12; -- tera
+ PeK : constant Thermodynamic_Temperature := 1.0E+15; -- peta
+ EK : constant Thermodynamic_Temperature := 1.0E+18; -- exa
+ ZeK : constant Thermodynamic_Temperature := 1.0E+21; -- zetta
+ YoK : constant Thermodynamic_Temperature := 1.0E+24; -- yotta
+
+ -- SI prefixes for Mole
+
+ ymol : constant Amount_Of_Substance := 1.0E-24; -- yocto
+ zmol : constant Amount_Of_Substance := 1.0E-21; -- zepto
+ amol : constant Amount_Of_Substance := 1.0E-18; -- atto
+ fmol : constant Amount_Of_Substance := 1.0E-15; -- femto
+ pmol : constant Amount_Of_Substance := 1.0E-12; -- pico
+ nmol : constant Amount_Of_Substance := 1.0E-09; -- nano
+ umol : constant Amount_Of_Substance := 1.0E-06; -- micro (u)
+ mmol : constant Amount_Of_Substance := 1.0E-03; -- milli
+ cmol : constant Amount_Of_Substance := 1.0E-02; -- centi
+ dmol : constant Amount_Of_Substance := 1.0E-01; -- deci
+ damol : constant Amount_Of_Substance := 1.0E+01; -- deka
+ hmol : constant Amount_Of_Substance := 1.0E+02; -- hecto
+ kmol : constant Amount_Of_Substance := 1.0E+03; -- kilo
+ Memol : constant Amount_Of_Substance := 1.0E+06; -- mega
+ Gmol : constant Amount_Of_Substance := 1.0E+09; -- giga
+ Tmol : constant Amount_Of_Substance := 1.0E+12; -- tera
+ Pemol : constant Amount_Of_Substance := 1.0E+15; -- peta
+ Emol : constant Amount_Of_Substance := 1.0E+18; -- exa
+ Zemol : constant Amount_Of_Substance := 1.0E+21; -- zetta
+ Yomol : constant Amount_Of_Substance := 1.0E+24; -- yotta
+
+ -- SI prefixes for Candela
+
+ ycd : constant Luminous_Intensity := 1.0E-24; -- yocto
+ zcd : constant Luminous_Intensity := 1.0E-21; -- zepto
+ acd : constant Luminous_Intensity := 1.0E-18; -- atto
+ fcd : constant Luminous_Intensity := 1.0E-15; -- femto
+ pcd : constant Luminous_Intensity := 1.0E-12; -- pico
+ ncd : constant Luminous_Intensity := 1.0E-09; -- nano
+ ucd : constant Luminous_Intensity := 1.0E-06; -- micro (u)
+ mcd : constant Luminous_Intensity := 1.0E-03; -- milli
+ ccd : constant Luminous_Intensity := 1.0E-02; -- centi
+ dcd : constant Luminous_Intensity := 1.0E-01; -- deci
+ dacd : constant Luminous_Intensity := 1.0E+01; -- deka
+ hcd : constant Luminous_Intensity := 1.0E+02; -- hecto
+ kcd : constant Luminous_Intensity := 1.0E+03; -- kilo
+ Mecd : constant Luminous_Intensity := 1.0E+06; -- mega
+ Gcd : constant Luminous_Intensity := 1.0E+09; -- giga
+ Tcd : constant Luminous_Intensity := 1.0E+12; -- tera
+ Pecd : constant Luminous_Intensity := 1.0E+15; -- peta
+ Ecd : constant Luminous_Intensity := 1.0E+18; -- exa
+ Zecd : constant Luminous_Intensity := 1.0E+21; -- zetta
+ Yocd : constant Luminous_Intensity := 1.0E+24; -- yotta
+
+ pragma Warnings (On);
+end System.Dim.Generic_Mks.Generic_Other_Prefixes;
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . F L O A T _ M K S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks;
+
+package System.Dim.Float_Mks is new System.Dim.Generic_Mks (Float);
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . G E N E R I C _ M K S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2011-2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- Defines the MKS dimension system which is the SI system of units
+
+-- Some other prefixes of this system are defined in a child package (see
+-- System.Dim.Generic_Mks.Generic_Other_Prefixes) in order to avoid too many
+-- constant declarations in this package.
+
+-- The dimension terminology is defined in System.Dim package
+
+with Ada.Numerics;
+
+generic
+ type Float_Type is digits <>;
+
+package System.Dim.Generic_Mks is
+
+ e : constant := Ada.Numerics.e;
+ Pi : constant := Ada.Numerics.Pi;
+
+ -- Dimensioned type Mks_Type
+
+ type Mks_Type is new Float_Type
+ with
+ Dimension_System => (
+ (Unit_Name => Meter, Unit_Symbol => 'm', Dim_Symbol => 'L'),
+ (Unit_Name => Kilogram, Unit_Symbol => "kg", Dim_Symbol => 'M'),
+ (Unit_Name => Second, Unit_Symbol => 's', Dim_Symbol => 'T'),
+ (Unit_Name => Ampere, Unit_Symbol => 'A', Dim_Symbol => 'I'),
+ (Unit_Name => Kelvin, Unit_Symbol => 'K', Dim_Symbol => '@'),
+ (Unit_Name => Mole, Unit_Symbol => "mol", Dim_Symbol => 'N'),
+ (Unit_Name => Candela, Unit_Symbol => "cd", Dim_Symbol => 'J'));
+
+ -- SI Base dimensioned subtypes
+
+ subtype Length is Mks_Type
+ with
+ Dimension => (Symbol => 'm',
+ Meter => 1,
+ others => 0);
+
+ subtype Mass is Mks_Type
+ with
+ Dimension => (Symbol => "kg",
+ Kilogram => 1,
+ others => 0);
+
+ subtype Time is Mks_Type
+ with
+ Dimension => (Symbol => 's',
+ Second => 1,
+ others => 0);
+
+ subtype Electric_Current is Mks_Type
+ with
+ Dimension => (Symbol => 'A',
+ Ampere => 1,
+ others => 0);
+
+ subtype Thermodynamic_Temperature is Mks_Type
+ with
+ Dimension => (Symbol => 'K',
+ Kelvin => 1,
+ others => 0);
+
+ subtype Amount_Of_Substance is Mks_Type
+ with
+ Dimension => (Symbol => "mol",
+ Mole => 1,
+ others => 0);
+
+ subtype Luminous_Intensity is Mks_Type
+ with
+ Dimension => (Symbol => "cd",
+ Candela => 1,
+ others => 0);
+
+ -- Initialize SI Base unit values
+
+ -- Turn off the all the dimension warnings for these basic assignments
+ -- since otherwise we would get complaints about assigning dimensionless
+ -- values to dimensioned subtypes (we can't assign 1.0*m to m).
+
+ pragma Warnings (Off, "*assumed to be*");
+
+ m : constant Length := 1.0;
+ kg : constant Mass := 1.0;
+ s : constant Time := 1.0;
+ A : constant Electric_Current := 1.0;
+ K : constant Thermodynamic_Temperature := 1.0;
+ mol : constant Amount_Of_Substance := 1.0;
+ cd : constant Luminous_Intensity := 1.0;
+
+ pragma Warnings (On, "*assumed to be*");
+
+ -- SI Derived dimensioned subtypes
+
+ subtype Absorbed_Dose is Mks_Type
+ with
+ Dimension => (Symbol => "Gy",
+ Meter => 2,
+ Second => -2,
+ others => 0);
+
+ subtype Angle is Mks_Type
+ with
+ Dimension => (Symbol => "rad",
+ others => 0);
+
+ subtype Area is Mks_Type
+ with
+ Dimension => (
+ Meter => 2,
+ others => 0);
+
+ subtype Catalytic_Activity is Mks_Type
+ with
+ Dimension => (Symbol => "kat",
+ Second => -1,
+ Mole => 1,
+ others => 0);
+
+ subtype Celsius_Temperature is Mks_Type
+ with
+ Dimension => (Symbol => "°C",
+ Kelvin => 1,
+ others => 0);
+
+ subtype Electric_Capacitance is Mks_Type
+ with
+ Dimension => (Symbol => 'F',
+ Meter => -2,
+ Kilogram => -1,
+ Second => 4,
+ Ampere => 2,
+ others => 0);
+
+ subtype Electric_Charge is Mks_Type
+ with
+ Dimension => (Symbol => 'C',
+ Second => 1,
+ Ampere => 1,
+ others => 0);
+
+ subtype Electric_Conductance is Mks_Type
+ with
+ Dimension => (Symbol => 'S',
+ Meter => -2,
+ Kilogram => -1,
+ Second => 3,
+ Ampere => 2,
+ others => 0);
+
+ subtype Electric_Potential_Difference is Mks_Type
+ with
+ Dimension => (Symbol => 'V',
+ Meter => 2,
+ Kilogram => 1,
+ Second => -3,
+ Ampere => -1,
+ others => 0);
+
+ -- Note the type punning below. The Symbol is a single "ohm" character
+ -- encoded in UTF-8 (ce a9 in hexadecimal), but this file is not compiled
+ -- with -gnatW8, so we're treating the string literal as a two-character
+ -- String.
+
+ subtype Electric_Resistance is Mks_Type
+ with
+ Dimension => (Symbol => "Ω",
+ Meter => 2,
+ Kilogram => 1,
+ Second => -3,
+ Ampere => -2,
+ others => 0);
+
+ subtype Energy is Mks_Type
+ with
+ Dimension => (Symbol => 'J',
+ Meter => 2,
+ Kilogram => 1,
+ Second => -2,
+ others => 0);
+
+ subtype Equivalent_Dose is Mks_Type
+ with
+ Dimension => (Symbol => "Sv",
+ Meter => 2,
+ Second => -2,
+ others => 0);
+
+ subtype Force is Mks_Type
+ with
+ Dimension => (Symbol => 'N',
+ Meter => 1,
+ Kilogram => 1,
+ Second => -2,
+ others => 0);
+
+ subtype Frequency is Mks_Type
+ with
+ Dimension => (Symbol => "Hz",
+ Second => -1,
+ others => 0);
+
+ subtype Illuminance is Mks_Type
+ with
+ Dimension => (Symbol => "lx",
+ Meter => -2,
+ Candela => 1,
+ others => 0);
+
+ subtype Inductance is Mks_Type
+ with
+ Dimension => (Symbol => 'H',
+ Meter => 2,
+ Kilogram => 1,
+ Second => -2,
+ Ampere => -2,
+ others => 0);
+
+ subtype Luminous_Flux is Mks_Type
+ with
+ Dimension => (Symbol => "lm",
+ Candela => 1,
+ others => 0);
+
+ subtype Magnetic_Flux is Mks_Type
+ with
+ Dimension => (Symbol => "Wb",
+ Meter => 2,
+ Kilogram => 1,
+ Second => -2,
+ Ampere => -1,
+ others => 0);
+
+ subtype Magnetic_Flux_Density is Mks_Type
+ with
+ Dimension => (Symbol => 'T',
+ Kilogram => 1,
+ Second => -2,
+ Ampere => -1,
+ others => 0);
+
+ subtype Power is Mks_Type
+ with
+ Dimension => (Symbol => 'W',
+ Meter => 2,
+ Kilogram => 1,
+ Second => -3,
+ others => 0);
+
+ subtype Pressure is Mks_Type
+ with
+ Dimension => (Symbol => "Pa",
+ Meter => -1,
+ Kilogram => 1,
+ Second => -2,
+ others => 0);
+
+ subtype Radioactivity is Mks_Type
+ with
+ Dimension => (Symbol => "Bq",
+ Second => -1,
+ others => 0);
+
+ subtype Solid_Angle is Mks_Type
+ with
+ Dimension => (Symbol => "sr",
+ others => 0);
+
+ subtype Speed is Mks_Type
+ with
+ Dimension => (
+ Meter => 1,
+ Second => -1,
+ others => 0);
+
+ subtype Volume is Mks_Type
+ with
+ Dimension => (
+ Meter => 3,
+ others => 0);
+
+ -- Initialize derived dimension values
+
+ -- Turn off the all the dimension warnings for these basic assignments
+ -- since otherwise we would get complaints about assigning dimensionless
+ -- values to dimensioned subtypes.
+
+ pragma Warnings (Off, "*assumed to be*");
+
+ rad : constant Angle := 1.0;
+ sr : constant Solid_Angle := 1.0;
+ Hz : constant Frequency := 1.0;
+ N : constant Force := 1.0;
+ Pa : constant Pressure := 1.0;
+ J : constant Energy := 1.0;
+ W : constant Power := 1.0;
+ C : constant Electric_Charge := 1.0;
+ V : constant Electric_Potential_Difference := 1.0;
+ F : constant Electric_Capacitance := 1.0;
+ Ohm : constant Electric_Resistance := 1.0;
+ Si : constant Electric_Conductance := 1.0;
+ Wb : constant Magnetic_Flux := 1.0;
+ T : constant Magnetic_Flux_Density := 1.0;
+ H : constant Inductance := 1.0;
+ dC : constant Celsius_Temperature := 273.15;
+ lm : constant Luminous_Flux := 1.0;
+ lx : constant Illuminance := 1.0;
+ Bq : constant Radioactivity := 1.0;
+ Gy : constant Absorbed_Dose := 1.0;
+ Sv : constant Equivalent_Dose := 1.0;
+ kat : constant Catalytic_Activity := 1.0;
+
+ -- SI prefixes for Meter
+
+ um : constant Length := 1.0E-06; -- micro (u)
+ mm : constant Length := 1.0E-03; -- milli
+ cm : constant Length := 1.0E-02; -- centi
+ dm : constant Length := 1.0E-01; -- deci
+ dam : constant Length := 1.0E+01; -- deka
+ hm : constant Length := 1.0E+02; -- hecto
+ km : constant Length := 1.0E+03; -- kilo
+ Mem : constant Length := 1.0E+06; -- mega
+
+ -- SI prefixes for Kilogram
+
+ ug : constant Mass := 1.0E-09; -- micro (u)
+ mg : constant Mass := 1.0E-06; -- milli
+ cg : constant Mass := 1.0E-05; -- centi
+ dg : constant Mass := 1.0E-04; -- deci
+ g : constant Mass := 1.0E-03; -- gram
+ dag : constant Mass := 1.0E-02; -- deka
+ hg : constant Mass := 1.0E-01; -- hecto
+ Meg : constant Mass := 1.0E+03; -- mega
+
+ -- SI prefixes for Second
+
+ us : constant Time := 1.0E-06; -- micro (u)
+ ms : constant Time := 1.0E-03; -- milli
+ cs : constant Time := 1.0E-02; -- centi
+ ds : constant Time := 1.0E-01; -- deci
+ das : constant Time := 1.0E+01; -- deka
+ hs : constant Time := 1.0E+02; -- hecto
+ ks : constant Time := 1.0E+03; -- kilo
+ Mes : constant Time := 1.0E+06; -- mega
+
+ -- Other constants for Second
+
+ min : constant Time := 60.0 * s;
+ hour : constant Time := 60.0 * min;
+ day : constant Time := 24.0 * hour;
+ year : constant Time := 365.25 * day;
+
+ -- SI prefixes for Ampere
+
+ mA : constant Electric_Current := 1.0E-03; -- milli
+ cA : constant Electric_Current := 1.0E-02; -- centi
+ dA : constant Electric_Current := 1.0E-01; -- deci
+ daA : constant Electric_Current := 1.0E+01; -- deka
+ hA : constant Electric_Current := 1.0E+02; -- hecto
+ kA : constant Electric_Current := 1.0E+03; -- kilo
+ MeA : constant Electric_Current := 1.0E+06; -- mega
+
+ pragma Warnings (On, "*assumed to be*");
+end System.Dim.Generic_Mks;
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . L O N G _ M K S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks;
+
+package System.Dim.Long_Mks is new System.Dim.Generic_Mks (Long_Float);
-- --
------------------------------------------------------------------------------
--- Defines the MKS dimension system which is the SI system of units
+with System.Dim.Generic_Mks;
--- Some other prefixes of this system are defined in a child package (see
--- System.Dim_Mks.Other_Prefixes) in order to avoid too many constant
--- declarations in this package.
-
--- The dimension terminology is defined in System.Dim_IO package
-
-with Ada.Numerics;
-
-package System.Dim.Mks is
-
- e : constant := Ada.Numerics.e;
- Pi : constant := Ada.Numerics.Pi;
-
- -- Dimensioned type Mks_Type
-
- type Mks_Type is new Long_Long_Float
- with
- Dimension_System => (
- (Unit_Name => Meter, Unit_Symbol => 'm', Dim_Symbol => 'L'),
- (Unit_Name => Kilogram, Unit_Symbol => "kg", Dim_Symbol => 'M'),
- (Unit_Name => Second, Unit_Symbol => 's', Dim_Symbol => 'T'),
- (Unit_Name => Ampere, Unit_Symbol => 'A', Dim_Symbol => 'I'),
- (Unit_Name => Kelvin, Unit_Symbol => 'K', Dim_Symbol => '@'),
- (Unit_Name => Mole, Unit_Symbol => "mol", Dim_Symbol => 'N'),
- (Unit_Name => Candela, Unit_Symbol => "cd", Dim_Symbol => 'J'));
-
- -- SI Base dimensioned subtypes
-
- subtype Length is Mks_Type
- with
- Dimension => (Symbol => 'm',
- Meter => 1,
- others => 0);
-
- subtype Mass is Mks_Type
- with
- Dimension => (Symbol => "kg",
- Kilogram => 1,
- others => 0);
-
- subtype Time is Mks_Type
- with
- Dimension => (Symbol => 's',
- Second => 1,
- others => 0);
-
- subtype Electric_Current is Mks_Type
- with
- Dimension => (Symbol => 'A',
- Ampere => 1,
- others => 0);
-
- subtype Thermodynamic_Temperature is Mks_Type
- with
- Dimension => (Symbol => 'K',
- Kelvin => 1,
- others => 0);
-
- subtype Amount_Of_Substance is Mks_Type
- with
- Dimension => (Symbol => "mol",
- Mole => 1,
- others => 0);
-
- subtype Luminous_Intensity is Mks_Type
- with
- Dimension => (Symbol => "cd",
- Candela => 1,
- others => 0);
-
- -- Initialize SI Base unit values
-
- -- Turn off the all the dimension warnings for these basic assignments
- -- since otherwise we would get complaints about assigning dimensionless
- -- values to dimensioned subtypes (we can't assign 1.0*m to m).
-
- pragma Warnings (Off, "*assumed to be*");
-
- m : constant Length := 1.0;
- kg : constant Mass := 1.0;
- s : constant Time := 1.0;
- A : constant Electric_Current := 1.0;
- K : constant Thermodynamic_Temperature := 1.0;
- mol : constant Amount_Of_Substance := 1.0;
- cd : constant Luminous_Intensity := 1.0;
-
- pragma Warnings (On, "*assumed to be*");
-
- -- SI Derived dimensioned subtypes
-
- subtype Absorbed_Dose is Mks_Type
- with
- Dimension => (Symbol => "Gy",
- Meter => 2,
- Second => -2,
- others => 0);
-
- subtype Angle is Mks_Type
- with
- Dimension => (Symbol => "rad",
- others => 0);
-
- subtype Area is Mks_Type
- with
- Dimension => (
- Meter => 2,
- others => 0);
-
- subtype Catalytic_Activity is Mks_Type
- with
- Dimension => (Symbol => "kat",
- Second => -1,
- Mole => 1,
- others => 0);
-
- subtype Celsius_Temperature is Mks_Type
- with
- Dimension => (Symbol => "°C",
- Kelvin => 1,
- others => 0);
-
- subtype Electric_Capacitance is Mks_Type
- with
- Dimension => (Symbol => 'F',
- Meter => -2,
- Kilogram => -1,
- Second => 4,
- Ampere => 2,
- others => 0);
-
- subtype Electric_Charge is Mks_Type
- with
- Dimension => (Symbol => 'C',
- Second => 1,
- Ampere => 1,
- others => 0);
-
- subtype Electric_Conductance is Mks_Type
- with
- Dimension => (Symbol => 'S',
- Meter => -2,
- Kilogram => -1,
- Second => 3,
- Ampere => 2,
- others => 0);
-
- subtype Electric_Potential_Difference is Mks_Type
- with
- Dimension => (Symbol => 'V',
- Meter => 2,
- Kilogram => 1,
- Second => -3,
- Ampere => -1,
- others => 0);
-
- -- Note the type punning below. The Symbol is a single "ohm" character
- -- encoded in UTF-8 (ce a9 in hexadecimal), but this file is not compiled
- -- with -gnatW8, so we're treating the string literal as a two-character
- -- String.
-
- subtype Electric_Resistance is Mks_Type
- with
- Dimension => (Symbol => "Ω",
- Meter => 2,
- Kilogram => 1,
- Second => -3,
- Ampere => -2,
- others => 0);
-
- subtype Energy is Mks_Type
- with
- Dimension => (Symbol => 'J',
- Meter => 2,
- Kilogram => 1,
- Second => -2,
- others => 0);
-
- subtype Equivalent_Dose is Mks_Type
- with
- Dimension => (Symbol => "Sv",
- Meter => 2,
- Second => -2,
- others => 0);
-
- subtype Force is Mks_Type
- with
- Dimension => (Symbol => 'N',
- Meter => 1,
- Kilogram => 1,
- Second => -2,
- others => 0);
-
- subtype Frequency is Mks_Type
- with
- Dimension => (Symbol => "Hz",
- Second => -1,
- others => 0);
-
- subtype Illuminance is Mks_Type
- with
- Dimension => (Symbol => "lx",
- Meter => -2,
- Candela => 1,
- others => 0);
-
- subtype Inductance is Mks_Type
- with
- Dimension => (Symbol => 'H',
- Meter => 2,
- Kilogram => 1,
- Second => -2,
- Ampere => -2,
- others => 0);
-
- subtype Luminous_Flux is Mks_Type
- with
- Dimension => (Symbol => "lm",
- Candela => 1,
- others => 0);
-
- subtype Magnetic_Flux is Mks_Type
- with
- Dimension => (Symbol => "Wb",
- Meter => 2,
- Kilogram => 1,
- Second => -2,
- Ampere => -1,
- others => 0);
-
- subtype Magnetic_Flux_Density is Mks_Type
- with
- Dimension => (Symbol => 'T',
- Kilogram => 1,
- Second => -2,
- Ampere => -1,
- others => 0);
-
- subtype Power is Mks_Type
- with
- Dimension => (Symbol => 'W',
- Meter => 2,
- Kilogram => 1,
- Second => -3,
- others => 0);
-
- subtype Pressure is Mks_Type
- with
- Dimension => (Symbol => "Pa",
- Meter => -1,
- Kilogram => 1,
- Second => -2,
- others => 0);
-
- subtype Radioactivity is Mks_Type
- with
- Dimension => (Symbol => "Bq",
- Second => -1,
- others => 0);
-
- subtype Solid_Angle is Mks_Type
- with
- Dimension => (Symbol => "sr",
- others => 0);
-
- subtype Speed is Mks_Type
- with
- Dimension => (
- Meter => 1,
- Second => -1,
- others => 0);
-
- subtype Volume is Mks_Type
- with
- Dimension => (
- Meter => 3,
- others => 0);
-
- -- Initialize derived dimension values
-
- -- Turn off the all the dimension warnings for these basic assignments
- -- since otherwise we would get complaints about assigning dimensionless
- -- values to dimensioned subtypes.
-
- pragma Warnings (Off, "*assumed to be*");
-
- rad : constant Angle := 1.0;
- sr : constant Solid_Angle := 1.0;
- Hz : constant Frequency := 1.0;
- N : constant Force := 1.0;
- Pa : constant Pressure := 1.0;
- J : constant Energy := 1.0;
- W : constant Power := 1.0;
- C : constant Electric_Charge := 1.0;
- V : constant Electric_Potential_Difference := 1.0;
- F : constant Electric_Capacitance := 1.0;
- Ohm : constant Electric_Resistance := 1.0;
- Si : constant Electric_Conductance := 1.0;
- Wb : constant Magnetic_Flux := 1.0;
- T : constant Magnetic_Flux_Density := 1.0;
- H : constant Inductance := 1.0;
- dC : constant Celsius_Temperature := 273.15;
- lm : constant Luminous_Flux := 1.0;
- lx : constant Illuminance := 1.0;
- Bq : constant Radioactivity := 1.0;
- Gy : constant Absorbed_Dose := 1.0;
- Sv : constant Equivalent_Dose := 1.0;
- kat : constant Catalytic_Activity := 1.0;
-
- -- SI prefixes for Meter
-
- um : constant Length := 1.0E-06; -- micro (u)
- mm : constant Length := 1.0E-03; -- milli
- cm : constant Length := 1.0E-02; -- centi
- dm : constant Length := 1.0E-01; -- deci
- dam : constant Length := 1.0E+01; -- deka
- hm : constant Length := 1.0E+02; -- hecto
- km : constant Length := 1.0E+03; -- kilo
- Mem : constant Length := 1.0E+06; -- mega
-
- -- SI prefixes for Kilogram
-
- ug : constant Mass := 1.0E-09; -- micro (u)
- mg : constant Mass := 1.0E-06; -- milli
- cg : constant Mass := 1.0E-05; -- centi
- dg : constant Mass := 1.0E-04; -- deci
- g : constant Mass := 1.0E-03; -- gram
- dag : constant Mass := 1.0E-02; -- deka
- hg : constant Mass := 1.0E-01; -- hecto
- Meg : constant Mass := 1.0E+03; -- mega
-
- -- SI prefixes for Second
-
- us : constant Time := 1.0E-06; -- micro (u)
- ms : constant Time := 1.0E-03; -- milli
- cs : constant Time := 1.0E-02; -- centi
- ds : constant Time := 1.0E-01; -- deci
- das : constant Time := 1.0E+01; -- deka
- hs : constant Time := 1.0E+02; -- hecto
- ks : constant Time := 1.0E+03; -- kilo
- Mes : constant Time := 1.0E+06; -- mega
-
- -- Other constants for Second
-
- min : constant Time := 60.0 * s;
- hour : constant Time := 60.0 * min;
- day : constant Time := 24.0 * hour;
- year : constant Time := 365.25 * day;
-
- -- SI prefixes for Ampere
-
- mA : constant Electric_Current := 1.0E-03; -- milli
- cA : constant Electric_Current := 1.0E-02; -- centi
- dA : constant Electric_Current := 1.0E-01; -- deci
- daA : constant Electric_Current := 1.0E+01; -- deka
- hA : constant Electric_Current := 1.0E+02; -- hecto
- kA : constant Electric_Current := 1.0E+03; -- kilo
- MeA : constant Electric_Current := 1.0E+06; -- mega
-
- pragma Warnings (On, "*assumed to be*");
-end System.Dim.Mks;
+package System.Dim.Mks is new System.Dim.Generic_Mks (Long_Long_Float);
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . L O N G _ M K S _ I O --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- Provides output facilities for the Long_Float MKS dimension system (see
+-- System.Dim.Long_Mks and System.Dim.Float_IO).
+
+with System.Dim.Long_Mks; use System.Dim.Long_Mks;
+with System.Dim.Float_IO;
+
+package System.Dim.Long_Mks_IO is new System.Dim.Float_IO (Mks_Type);
--- /dev/null
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . D I M . L O N G _ M K S . O T H E R _ P R E F I X E S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2018, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks.Generic_Other_Prefixes;
+
+package System.Dim.Long_Mks.Other_Prefixes is
+ new System.Dim.Long_Mks.Generic_Other_Prefixes;
-- --
------------------------------------------------------------------------------
--- Package that defines some other prefixes for the MKS base unit system.
-
--- These prefixes have been defined in a child package in order to avoid too
--- many constant declarations in System.Dim_Mks.
+with System.Dim.Generic_Mks.Generic_Other_Prefixes;
package System.Dim.Mks.Other_Prefixes is
-
- -- SI prefixes for Meter
-
- pragma Warnings (Off);
- -- Turn off the all the dimension warnings
-
- ym : constant Length := 1.0E-24; -- yocto
- zm : constant Length := 1.0E-21; -- zepto
- am : constant Length := 1.0E-18; -- atto
- fm : constant Length := 1.0E-15; -- femto
- pm : constant Length := 1.0E-12; -- pico
- nm : constant Length := 1.0E-09; -- nano
- Gm : constant Length := 1.0E+09; -- giga
- Tm : constant Length := 1.0E+12; -- tera
- Pem : constant Length := 1.0E+15; -- peta
- Em : constant Length := 1.0E+18; -- exa
- Zem : constant Length := 1.0E+21; -- zetta
- Yom : constant Length := 1.0E+24; -- yotta
-
- -- SI prefixes for Kilogram
-
- yg : constant Mass := 1.0E-27; -- yocto
- zg : constant Mass := 1.0E-24; -- zepto
- ag : constant Mass := 1.0E-21; -- atto
- fg : constant Mass := 1.0E-18; -- femto
- pg : constant Mass := 1.0E-15; -- pico
- ng : constant Mass := 1.0E-12; -- nano
- Gg : constant Mass := 1.0E+06; -- giga
- Tg : constant Mass := 1.0E+09; -- tera
- Peg : constant Mass := 1.0E+13; -- peta
- Eg : constant Mass := 1.0E+15; -- exa
- Zeg : constant Mass := 1.0E+18; -- zetta
- Yog : constant Mass := 1.0E+21; -- yotta
-
- -- SI prefixes for Second
-
- ys : constant Time := 1.0E-24; -- yocto
- zs : constant Time := 1.0E-21; -- zepto
- as : constant Time := 1.0E-18; -- atto
- fs : constant Time := 1.0E-15; -- femto
- ps : constant Time := 1.0E-12; -- pico
- ns : constant Time := 1.0E-09; -- nano
- Gs : constant Time := 1.0E+09; -- giga
- Ts : constant Time := 1.0E+12; -- tera
- Pes : constant Time := 1.0E+15; -- peta
- Es : constant Time := 1.0E+18; -- exa
- Zes : constant Time := 1.0E+21; -- zetta
- Yos : constant Time := 1.0E+24; -- yotta
-
- -- SI prefixes for Ampere
-
- yA : constant Electric_Current := 1.0E-24; -- yocto
- zA : constant Electric_Current := 1.0E-21; -- zepto
- aA : constant Electric_Current := 1.0E-18; -- atto
- fA : constant Electric_Current := 1.0E-15; -- femto
- nA : constant Electric_Current := 1.0E-09; -- nano
- uA : constant Electric_Current := 1.0E-06; -- micro (u)
- GA : constant Electric_Current := 1.0E+09; -- giga
- TA : constant Electric_Current := 1.0E+12; -- tera
- PeA : constant Electric_Current := 1.0E+15; -- peta
- EA : constant Electric_Current := 1.0E+18; -- exa
- ZeA : constant Electric_Current := 1.0E+21; -- zetta
- YoA : constant Electric_Current := 1.0E+24; -- yotta
-
- -- SI prefixes for Kelvin
-
- yK : constant Thermodynamic_Temperature := 1.0E-24; -- yocto
- zK : constant Thermodynamic_Temperature := 1.0E-21; -- zepto
- aK : constant Thermodynamic_Temperature := 1.0E-18; -- atto
- fK : constant Thermodynamic_Temperature := 1.0E-15; -- femto
- pK : constant Thermodynamic_Temperature := 1.0E-12; -- pico
- nK : constant Thermodynamic_Temperature := 1.0E-09; -- nano
- uK : constant Thermodynamic_Temperature := 1.0E-06; -- micro (u)
- mK : constant Thermodynamic_Temperature := 1.0E-03; -- milli
- cK : constant Thermodynamic_Temperature := 1.0E-02; -- centi
- dK : constant Thermodynamic_Temperature := 1.0E-01; -- deci
- daK : constant Thermodynamic_Temperature := 1.0E+01; -- deka
- hK : constant Thermodynamic_Temperature := 1.0E+02; -- hecto
- kK : constant Thermodynamic_Temperature := 1.0E+03; -- kilo
- MeK : constant Thermodynamic_Temperature := 1.0E+06; -- mega
- GK : constant Thermodynamic_Temperature := 1.0E+09; -- giga
- TK : constant Thermodynamic_Temperature := 1.0E+12; -- tera
- PeK : constant Thermodynamic_Temperature := 1.0E+15; -- peta
- EK : constant Thermodynamic_Temperature := 1.0E+18; -- exa
- ZeK : constant Thermodynamic_Temperature := 1.0E+21; -- zetta
- YoK : constant Thermodynamic_Temperature := 1.0E+24; -- yotta
-
- -- SI prefixes for Mole
-
- ymol : constant Amount_Of_Substance := 1.0E-24; -- yocto
- zmol : constant Amount_Of_Substance := 1.0E-21; -- zepto
- amol : constant Amount_Of_Substance := 1.0E-18; -- atto
- fmol : constant Amount_Of_Substance := 1.0E-15; -- femto
- pmol : constant Amount_Of_Substance := 1.0E-12; -- pico
- nmol : constant Amount_Of_Substance := 1.0E-09; -- nano
- umol : constant Amount_Of_Substance := 1.0E-06; -- micro (u)
- mmol : constant Amount_Of_Substance := 1.0E-03; -- milli
- cmol : constant Amount_Of_Substance := 1.0E-02; -- centi
- dmol : constant Amount_Of_Substance := 1.0E-01; -- deci
- damol : constant Amount_Of_Substance := 1.0E+01; -- deka
- hmol : constant Amount_Of_Substance := 1.0E+02; -- hecto
- kmol : constant Amount_Of_Substance := 1.0E+03; -- kilo
- Memol : constant Amount_Of_Substance := 1.0E+06; -- mega
- Gmol : constant Amount_Of_Substance := 1.0E+09; -- giga
- Tmol : constant Amount_Of_Substance := 1.0E+12; -- tera
- Pemol : constant Amount_Of_Substance := 1.0E+15; -- peta
- Emol : constant Amount_Of_Substance := 1.0E+18; -- exa
- Zemol : constant Amount_Of_Substance := 1.0E+21; -- zetta
- Yomol : constant Amount_Of_Substance := 1.0E+24; -- yotta
-
- -- SI prefixes for Candela
-
- ycd : constant Luminous_Intensity := 1.0E-24; -- yocto
- zcd : constant Luminous_Intensity := 1.0E-21; -- zepto
- acd : constant Luminous_Intensity := 1.0E-18; -- atto
- fcd : constant Luminous_Intensity := 1.0E-15; -- femto
- pcd : constant Luminous_Intensity := 1.0E-12; -- pico
- ncd : constant Luminous_Intensity := 1.0E-09; -- nano
- ucd : constant Luminous_Intensity := 1.0E-06; -- micro (u)
- mcd : constant Luminous_Intensity := 1.0E-03; -- milli
- ccd : constant Luminous_Intensity := 1.0E-02; -- centi
- dcd : constant Luminous_Intensity := 1.0E-01; -- deci
- dacd : constant Luminous_Intensity := 1.0E+01; -- deka
- hcd : constant Luminous_Intensity := 1.0E+02; -- hecto
- kcd : constant Luminous_Intensity := 1.0E+03; -- kilo
- Mecd : constant Luminous_Intensity := 1.0E+06; -- mega
- Gcd : constant Luminous_Intensity := 1.0E+09; -- giga
- Tcd : constant Luminous_Intensity := 1.0E+12; -- tera
- Pecd : constant Luminous_Intensity := 1.0E+15; -- peta
- Ecd : constant Luminous_Intensity := 1.0E+18; -- exa
- Zecd : constant Luminous_Intensity := 1.0E+21; -- zetta
- Yocd : constant Luminous_Intensity := 1.0E+24; -- yotta
-
- pragma Warnings (On);
-end System.Dim.Mks.Other_Prefixes;
+ new System.Dim.Mks.Generic_Other_Prefixes;