Ada Programming/Libraries/Standard/RM

From Wikibooks, open books for an open world
Jump to navigation Jump to search
package Standard is
  pragma Pure (Standard);

  type Boolean is (False, True);

  -- The predefined relational operators for this type are as follows:

  -- function "="   (Left, Right : Boolean'Base) return Boolean;
  -- function "/="  (Left, Right : Boolean'Base) return Boolean;
  -- function "<"   (Left, Right : Boolean'Base) return Boolean;
  -- function "<="  (Left, Right : Boolean'Base) return Boolean;
  -- function ">"   (Left, Right : Boolean'Base) return Boolean;
  -- function ">="  (Left, Right : Boolean'Base) return Boolean;

  -- The predefined logical operators and the predefined logical
  -- negation operator are as follows:

  -- function "and" (Left, Right : Boolean'Base) return Boolean;
  -- function "or"  (Left, Right : Boolean'Base) return Boolean;
  -- function "xor" (Left, Right : Boolean'Base) return Boolean;

  -- function "not" (Right : Boolean'Base) return Boolean;

  -- The integer type root_integer and the
  -- corresponding universal type universal_integer are predefined.

  type Integer is range implementation-defined;

  subtype Natural  is Integer range 0 .. Integer'Last;
  subtype Positive is Integer range 1 .. Integer'Last;

  -- The predefined operators for type Integer are as follows:

  -- function "="  (Left, Right : Integer'Base) return Boolean;
  -- function "/=" (Left, Right : Integer'Base) return Boolean;
  -- function "<"  (Left, Right : Integer'Base) return Boolean;
  -- function "<=" (Left, Right : Integer'Base) return Boolean;
  -- function ">"  (Left, Right : Integer'Base) return Boolean;
  -- function ">=" (Left, Right : Integer'Base) return Boolean;

  -- function "+"   (Right : Integer'Base) return Integer'Base;
  -- function "-"   (Right : Integer'Base) return Integer'Base;
  -- function "abs" (Right : Integer'Base) return Integer'Base;

  -- function "+"   (Left, Right : Integer'Base) return Integer'Base;
  -- function "-"   (Left, Right : Integer'Base) return Integer'Base;
  -- function "*"   (Left, Right : Integer'Base) return Integer'Base;
  -- function "/"   (Left, Right : Integer'Base) return Integer'Base;
  -- function "rem" (Left, Right : Integer'Base) return Integer'Base;
  -- function "mod" (Left, Right : Integer'Base) return Integer'Base;

  -- function "**"  (Left : Integer'Base; Right : Natural)
  --                  return Integer'Base;

  -- The specification of each operator for the type
  -- root_integer, or for any additional predefined integer
  -- type, is obtained by replacing Integer by the name of the type
  -- in the specification of the corresponding operator of the type
  -- Integer. The right operand of the exponentiation operator
  -- remains as subtype Natural.

  -- The floating point type root_real and the
  -- corresponding universal type universal_real are predefined

  type Float is digits implementation-defined;

  -- The predefined operators for this type are as follows:

  -- function "="   (Left, Right : Float) return Boolean;
  -- function "/="  (Left, Right : Float) return Boolean;
  -- function "<"   (Left, Right : Float) return Boolean;
  -- function "<="  (Left, Right : Float) return Boolean;
  -- function ">"   (Left, Right : Float) return Boolean;
  -- function ">="  (Left, Right : Float) return Boolean;

  -- function "+"   (Right : Float) return Float;
  -- function "-"   (Right : Float) return Float;
  -- function "abs" (Right : Float) return Float;

  -- function "+"   (Left, Right : Float) return Float;
  -- function "-"   (Left, Right : Float) return Float;
  -- function "*"   (Left, Right : Float) return Float;
  -- function "/"   (Left, Right : Float) return Float;

  -- function "**"  (Left : Float; Right : Integer'Base) return Float;

  -- The specification of each operator for the type root_real, or for
  -- any additional predefined floating point type, is obtained by
  -- replacing Float by the name of the type in the specification of the
  -- corresponding operator of the type Float.

  -- In addition, the following operators are predefined for the root
  -- numeric types:

  function "*" (Left : root_integer; Right : root_real)
    return root_real;

  function "*" (Left : root_real;    Right : root_integer)
    return root_real;

  function "/" (Left : root_real;    Right : root_integer)
    return root_real;

  -- The type universal_fixed is predefined.
  -- The only multiplying operators defined between
  -- fixed point types are

  function "*" (Left : universal_fixed; Right : universal_fixed)
    return universal_fixed;

  function "/" (Left : universal_fixed; Right : universal_fixed)
    return universal_fixed;

  -- The type universal_access is predefined.
  -- The following equality operators are predefined:

  function "="  (Left, Right: universal_access) return Boolean;
  function "/=" (Left, Right: universal_access) return Boolean;

     -- The declaration of type Character is based on the standard ISO 8859-1 character set.

     -- There are no character literals corresponding to the positions for control characters.
     -- They are indicated in italics in this definition. See 3.5.2.

  type Character is
    (nul,     soh,   stx,    etx,      eot,   enq,    ack,   bel,   --   0 (16#00#) ..   7 (16#07#)
     bs,      ht,    lf,     vt,       ff,    cr,     so,    si,    --   8 (16#08#) ..  15 (16#0F#)

     dle,     dc1,   dc2,    dc3,      dc4,   nak,    syn,   etb,   --  16 (16#10#) ..  23 (16#17#)
     can,     em,    sub,    esc,      fs,    gs,     rs,    us,    --  24 (16#18#) ..  31 (16#1F#)

     ' ',     '!',   '"',    '#',      '$',   '%',    '&',   ''',   --  32 (16#20#) ..  39 (16#27#)
     '(',     ')',   '*',    '+',      ',',   '-',    '.',   '/',   --  40 (16#28#) ..  47 (16#2F#)

     '0',     '1',   '2',    '3',      '4',   '5',    '6',   '7',   --  48 (16#30#) ..  55 (16#37#)
     '8',     '9',   ':',    ';',      '<',   '=',    '>',   '?',   --  56 (16#38#) ..  63 (16#3F#)

     '@',     'A',   'B',    'C',      'D',   'E',    'F',   'G',   --  64 (16#40#) ..  71 (16#47#)
     'H',     'I',   'J',    'K',      'L',   'M',    'N',   'O',   --  72 (16#48#) ..  79 (16#4F#)

     'P',     'Q',   'R',    'S',      'T',   'U',    'V',   'W',   --  80 (16#50#) ..  87 (16#57#)
     'X',     'Y',   'Z',    '[',      '\',   ']',    '^',   '_',   --  88 (16#58#) ..  95 (16#5F#)

     '`',     'a',   'b',    'c',      'd',   'e',    'f',   'g',   --  96 (16#60#) .. 103 (16#67#)
     'h',     'i',   'j',    'k',      'l',   'm',    'n',   'o',   -- 104 (16#68#) .. 111 (16#6F#)

     'p',     'q',   'r',    's',      't',   'u',    'v',   'w',   -- 112 (16#70#) .. 119 (16#77#)
     'x',     'y',   'z',    '{',      '|',   '}',    '~',   del,   -- 120 (16#78#) .. 127 (16#7F#)

     reserved_128,   reserved_129,     bph,   nbh,                  -- 128 (16#80#) .. 131 (16#83#)
     reserved_132,   nel,    ssa,      esa,                         -- 132 (16#84#) .. 135 (16#87#)
     hts,     htj,   vts,    pld,      plu,   ri,     ss2,   ss3,   -- 136 (16#88#) .. 143 (16#8F#)

     dcs,     pu1,   pu2,    sts,      cch,   mw,     spa,   epa,   -- 144 (16#90#) .. 151 (16#97#)
     sos,     reserved_153,  sci,      csi,                         -- 152 (16#98#) .. 155 (16#9B#)
     st,      osc,   pm,     apc,                                   -- 156 (16#9C#) .. 159 (16#9F#)

     ' ',     '¡',   '¢',    '£',      '¤',   '¥',    '¦',   '§',   -- 160 (16#A0#) .. 167 (16#A7#)
     '¨',     '©',   'ª',    '«',                                   -- 168 (16#A8#) .. 171 (16#AB#)
     '¬',     soft_hyphen,    '®',   '¯',                           -- 172 (16#AC#) .. 175 (16#AF#)

     '°',     '±',   '²',    '³',      '´',   'µ',    '¶',   '·',   -- 176 (16#B0#) .. 183 (16#B7#)
     '¸',     '¹',   'º',    '»',      '¼',   '½',    '¾',   '¿',   -- 184 (16#B8#) .. 191 (16#BF#)

     'À',     'Á',   'Â',    'Ã',      'Ä',   'Å',    'Æ',   'Ç',   -- 192 (16#C0#) .. 199 (16#C7#)
     'È',     'É',   'Ê',    'Ë',      'Ì',   'Í',    'Î',   'Ï',   -- 200 (16#C8#) .. 207 (16#CF#)

     'Ð',     'Ñ',   'Ò',    'Ó',      'Ô',   'Õ',    'Ö',   '×',   -- 208 (16#D0#) .. 215 (16#D7#)
     'Ø',     'Ù',   'Ú',    'Û',      'Ü',   'Ý',    'Þ',   'ß',   -- 216 (16#D8#) .. 223 (16#DF#)

     'à',     'á',   'â',    'ã',      'ä',   'å',    'æ',   'ç',   -- 224 (16#E0#) .. 231 (16#E7#)
     'è',     'é',   'ê',    'ë',      'ì',   'í',    'î',   'ï',   -- 232 (16#E8#) .. 239 (16#EF#)

     'ð',     'ñ',   'ò',    'ó',      'ô',   'õ',    'ö',   '÷',   -- 240 (16#F0#) .. 247 (16#F7#)
     'ø',     'ù',   'ú',    'û',      'ü',   'ý',    'þ',   'ÿ',   -- 248 (16#F8#) .. 255 (16#FF#)

  -- The predefined operators for the type Character are the same as for
  -- any enumeration type.

  -- The declaration of type Wide_Character is based on the standard ISO/IEC 10646:2011 BMP character
  -- set. The first 256 positions have the same contents as type Character. See 3.5.2.

  type Wide_Character is (nul, soh ... Hex_0000FFFE, Hex_0000FFFF);

  -- The declaration of type Wide_Wide_Character is based on the full
  -- ISO/IEC 10646:2011 character set. The first 65536 positions have the
  -- same contents as type Wide_Character. See 3.5.2.

  type Wide_Wide_Character is (nul, soh ... Hex_7FFFFFFE, Hex_7FFFFFFF);
  for Wide_Wide_Character'Size use 32;

  package ASCII is ... end ASCII;  -- Obsolescent; see J.5

  -- Predefined string types:

  type String is array (Positive range <>) of Character
     with Pack;

  -- The predefined operators for this type are as follows:

  --     function "="  (Left, Right: String) return Boolean;
  --     function "/=" (Left, Right: String) return Boolean;
  --     function "<"  (Left, Right: String) return Boolean;
  --     function "<=" (Left, Right: String) return Boolean;
  --     function ">"  (Left, Right: String) return Boolean;
  --     function ">=" (Left, Right: String) return Boolean;

  --     function "&" (Left: String;    Right: String)    return String;
  --     function "&" (Left: Character; Right: String)    return String;
  --     function "&" (Left: String;    Right: Character) return String;
  --     function "&" (Left: Character; Right: Character) return String;

  type Wide_String is array (Positive range <>) of Wide_Character
  with Pack;

  -- The predefined operators for this type correspond to those for String.

  type Wide_Wide_String is array (Positive range <>)
     of Wide_Character
        with Pack;

  -- The predefined operators for this type correspond to those for String.

  type Duration is delta implementation-defined range implementation-defined;

     -- The predefined operators for the type Duration are the same as for
     -- any fixed point type.

  -- The predefined exceptions:

  Constraint_Error: exception;
  Program_Error   : exception;
  Storage_Error   : exception;
  Tasking_Error   : exception;

end Standard;