File : buf_streams.ads


   1 with Ada.Streams; use Ada.Streams;
   2 
   3 
   4 package Buf_Streams is
   5    
   6    type Stream_Access is not null access all Ada.Streams.Root_Stream_Type'Class;
   7    
   8    type Buf_Stream(Max_Elem : Ada.Streams.Stream_Element_Offset)
   9       is new Ada.Streams.Root_Stream_Type with private;
  10    
  11    type Buf_Stream_Access is access all Buf_Stream;
  12    
  13    overriding
  14    procedure Read(Stream : in out Buf_Stream;
  15                   Item   : out Stream_Element_Array;
  16                   Last   : out Stream_Element_Offset);
  17    
  18    overriding
  19    procedure Write(Stream : in out Buf_Stream;
  20                    Item   : in Stream_Element_Array);
  21    
  22    -- Reset fill and read indices.
  23    procedure Reset(Stream : in out Buf_Stream);
  24    
  25    -- Get the fill index.
  26    function GetFill(Stream : in Buf_Stream) return Natural;
  27    
  28    -- Fill to CURRENT fill position from given file.
  29    procedure Fill_From_File(Stream : in out Buf_Stream;
  30                             Path   : in String);
  31    
  32    -- Create file, save ENTIRE buffer to it.
  33    -- Does not affect read or fill indices.
  34    procedure Save_To_File(Stream : in out Buf_Stream;
  35                           Path   : in String);
  36    
  37 private
  38    
  39    type Buf_Stream(Max_Elem : Stream_Element_Offset) is new
  40      Ada.Streams.Root_Stream_Type with
  41       record
  42          Buffer   : Stream_Element_Array(1 .. Max_Elem) := (others => 0);
  43          Read_Idx : Stream_Element_Offset := 1;
  44          Fill_Idx : Stream_Element_Offset := 1;
  45       end record;
  46    
  47 end Buf_Streams;