File : i-cpoint.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                I N T E R F A C E S . C . P O I N T E R S                 --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1993-2010, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- This specification is derived from the Ada Reference Manual for use with --
  12 -- GNAT. The copyright notice above, and the license provisions that follow --
  13 -- apply solely to the  contents of the part following the private keyword. --
  14 --                                                                          --
  15 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  16 -- terms of the  GNU General Public License as published  by the Free Soft- --
  17 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  18 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  19 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  20 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  21 --                                                                          --
  22 --                                                                          --
  23 --                                                                          --
  24 --                                                                          --
  25 --                                                                          --
  26 -- You should have received a copy of the GNU General Public License and    --
  27 -- a copy of the GCC Runtime Library Exception along with this program;     --
  28 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  29 -- <http://www.gnu.org/licenses/>.                                          --
  30 --                                                                          --
  31 -- GNAT was originally developed  by the GNAT team at  New York University. --
  32 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  33 --                                                                          --
  34 ------------------------------------------------------------------------------
  35 
  36 with System.Parameters;
  37 
  38 generic
  39    type Index is (<>);
  40    type Element is private;
  41    type Element_Array is array (Index range <>) of aliased Element;
  42    Default_Terminator : Element;
  43 
  44 package Interfaces.C.Pointers is
  45    pragma Preelaborate;
  46 
  47    type Pointer is access all Element;
  48    for Pointer'Size use System.Parameters.ptr_bits;
  49 
  50    pragma No_Strict_Aliasing (Pointer);
  51    --  We turn off any strict aliasing assumptions for the pointer type,
  52    --  since it is possible to create "improperly" aliased values.
  53 
  54    function Value
  55      (Ref        : Pointer;
  56       Terminator : Element := Default_Terminator) return Element_Array;
  57 
  58    function Value
  59      (Ref    : Pointer;
  60       Length : ptrdiff_t) return Element_Array;
  61 
  62    Pointer_Error : exception;
  63 
  64    --------------------------------
  65    -- C-style Pointer Arithmetic --
  66    --------------------------------
  67 
  68    function "+" (Left : Pointer;   Right : ptrdiff_t) return Pointer;
  69    function "+" (Left : ptrdiff_t; Right : Pointer)   return Pointer;
  70    function "-" (Left : Pointer;   Right : ptrdiff_t) return Pointer;
  71    function "-" (Left : Pointer;   Right : Pointer)   return ptrdiff_t;
  72 
  73    procedure Increment (Ref : in out Pointer);
  74    procedure Decrement (Ref : in out Pointer);
  75 
  76    pragma Convention (Intrinsic, "+");
  77    pragma Convention (Intrinsic, "-");
  78    pragma Convention (Intrinsic, Increment);
  79    pragma Convention (Intrinsic, Decrement);
  80 
  81    function Virtual_Length
  82      (Ref        : Pointer;
  83       Terminator : Element := Default_Terminator) return ptrdiff_t;
  84 
  85    procedure Copy_Terminated_Array
  86      (Source     : Pointer;
  87       Target     : Pointer;
  88       Limit      : ptrdiff_t := ptrdiff_t'Last;
  89       Terminator : Element := Default_Terminator);
  90 
  91    procedure Copy_Array
  92      (Source  : Pointer;
  93       Target  : Pointer;
  94       Length  : ptrdiff_t);
  95 
  96 private
  97    pragma Inline ("+");
  98    pragma Inline ("-");
  99    pragma Inline (Decrement);
 100    pragma Inline (Increment);
 101 
 102 end Interfaces.C.Pointers;