-- Wraps around a regular Stream_IO stream to provide Available_Read/Write -- functions -- with Text_Io; package body Agpl.Streams.File is package Stream_IO renames Ada.Streams.Stream_IO; use type Stream_IO.Count; ------------------------------------------------------------------------ -- Create -- ------------------------------------------------------------------------ -- The Index function shouldn't be called after this creation!! procedure Create (Stream : out Stream_type; From : in Ada.Streams.Stream_IO.File_Type) is begin Stream.Back := Agpl.Streams.Stream_access (Stream_IO.Stream (From)); Stream.Available_Read := Stream_Element_Offset (Stream_IO.Size (From) - Stream_IO.Index (From) + 1); end Create; ------------------------------------------------------------------------ -- Overriden primitives -- ------------------------------------------------------------------------ procedure Read (Stream : in out Stream_type; Item : out Stream_Element_Array; Last : out Stream_Element_Offset) is begin -- Text_Io.Put_Line ("File remaining:" & Stream.Available_Read'Img); -- Text_Io.Put_Line ("Attempting read of:" & Item'Length'Img); Ada.Streams.Read (Stream.Back.all, Item, Last); Stream.Available_Read := Stream.Available_Read - (Last - Item'First + 1); end Read; procedure Write (Stream : in out Stream_type; Item : in Stream_Element_Array) is begin Ada.Streams.Write (Stream.Back.all, Item); end Write; ------------------------------------------------------------------------ -- Available_read -- ------------------------------------------------------------------------ -- Says how many data has been written but not read: function Available_read (Stream : in Stream_type) return Stream_Element_Count is begin return Stream.Available_Read; end Available_read; function Available_read (Stream : in Stream_type) return Natural is begin return Natural (Stream_Element_Count'(Available_read (Stream))); end Available_read; ------------------------------------------------------------------------ -- Available_write -- ------------------------------------------------------------------------ function Available_Write (Stream : in Stream_type) return Stream_Element_Count is pragma Unreferenced (Stream); begin return Stream_Element_Count'Last; end Available_Write; function Available_Write (Stream : in Stream_type) return Natural is pragma Unreferenced (Stream); begin return Natural'Last; end Available_Write; end Agpl.Streams.File;