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;