File : s-addope.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --             S Y S T E M . A D D R E S S _ O P E R A T I O N S            --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 2004-2013, 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 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  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 --  This package provides arithmetic and logical operations on type Address.
  33 --  It is intended for use by other packages in the System hierarchy. For
  34 --  applications requiring this capability, see System.Storage_Elements or
  35 --  the operations introduced in System.Aux_DEC;
  36 
  37 --  The reason we need this package is that arithmetic operations may not
  38 --  be available in the case where type Address is non-private and the
  39 --  operations have been made abstract in the spec of System (to avoid
  40 --  inappropriate use by applications programs). In addition, the logical
  41 --  operations may not be available if type Address is a signed integer.
  42 
  43 pragma Compiler_Unit_Warning;
  44 
  45 package System.Address_Operations is
  46    pragma Pure;
  47 
  48    --  The semantics of the arithmetic operations are those that apply to
  49    --  a modular type with the same length as Address, i.e. they provide
  50    --  twos complement wrap around arithmetic treating the address value
  51    --  as an unsigned value, with no overflow checking.
  52 
  53    --  Note that we do not use the infix names for these operations to
  54    --  avoid problems with ambiguities coming from declarations in package
  55    --  Standard (which may or may not be visible depending on the exact
  56    --  form of the declaration of type System.Address).
  57 
  58    --  For addition, subtraction, and multiplication, the effect of overflow
  59    --  is 2's complement wrapping (as though the type Address were unsigned).
  60 
  61    --  For division and modulus operations, the caller is responsible for
  62    --  ensuring that the Right argument is non-zero, and the effect of the
  63    --  call is not specified if a zero argument is passed.
  64 
  65    function AddA (Left, Right : Address) return Address;
  66    function SubA (Left, Right : Address) return Address;
  67    function MulA (Left, Right : Address) return Address;
  68    function DivA (Left, Right : Address) return Address;
  69    function ModA (Left, Right : Address) return Address;
  70 
  71    --  The semantics of the logical operations are those that apply to
  72    --  a modular type with the same length as Address, i.e. they provide
  73    --  bit-wise operations on all bits of the value (including the sign
  74    --  bit if Address is a signed integer type).
  75 
  76    function AndA (Left, Right : Address) return Address;
  77    function OrA  (Left, Right : Address) return Address;
  78 
  79    pragma Inline_Always (AddA);
  80    pragma Inline_Always (SubA);
  81    pragma Inline_Always (MulA);
  82    pragma Inline_Always (DivA);
  83    pragma Inline_Always (ModA);
  84    pragma Inline_Always (AndA);
  85    pragma Inline_Always (OrA);
  86 
  87 end System.Address_Operations;