File : a-stream.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --                           A D A . S T R E A M S                          --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2014, 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 package Ada.Streams is
  37    pragma Pure;
  38 
  39    type Root_Stream_Type is abstract tagged limited private;
  40    pragma Preelaborable_Initialization (Root_Stream_Type);
  41 
  42    type Stream_Element is mod 2 ** Standard'Storage_Unit;
  43 
  44    type Stream_Element_Offset is new Long_Long_Integer;
  45    --  Stream_Element_Offset needs 64 bits to accomodate large stream files.
  46    --  However, rather than make this explicitly 64-bits we derive from
  47    --  Long_Long_Integer. In normal usage this will have the same effect.
  48    --  But in the case of CodePeer with a target configuration file with a
  49    --  maximum integer size of 32, it allows analysis of this unit.
  50 
  51    subtype Stream_Element_Count is
  52       Stream_Element_Offset range 0 .. Stream_Element_Offset'Last;
  53 
  54    type Stream_Element_Array is
  55       array (Stream_Element_Offset range <>) of aliased Stream_Element;
  56 
  57    procedure Read
  58      (Stream : in out Root_Stream_Type;
  59       Item   : out Stream_Element_Array;
  60       Last   : out Stream_Element_Offset)
  61    is abstract;
  62 
  63    procedure Write
  64      (Stream : in out Root_Stream_Type;
  65       Item   : Stream_Element_Array)
  66    is abstract;
  67 
  68 private
  69 
  70    type Root_Stream_Type is abstract tagged limited null record;
  71 
  72    --  Stream attributes for Stream_Element_Array: trivially call the
  73    --  corresponding stream primitive for the whole array, instead of doing
  74    --  so element by element.
  75 
  76    procedure Read_SEA
  77      (S : access Root_Stream_Type'Class;
  78       V : out Stream_Element_Array);
  79 
  80    procedure Write_SEA
  81      (S : access Root_Stream_Type'Class;
  82       V : Stream_Element_Array);
  83 
  84    for Stream_Element_Array'Read use Read_SEA;
  85    for Stream_Element_Array'Write use Write_SEA;
  86 
  87 end Ada.Streams;