110 lines
2.6 KiB
Ada
110 lines
2.6 KiB
Ada
private with Ada.Text_IO;
|
|
|
|
package body Delayed_Stream is
|
|
-----------
|
|
-- Close --
|
|
-----------
|
|
|
|
procedure Close (File : in out Delayed) is
|
|
begin
|
|
null;
|
|
end Close;
|
|
|
|
------------
|
|
-- Create --
|
|
------------
|
|
|
|
procedure Create
|
|
(Resource : in out AWS.Resources.Streams.Stream_Type'Class;
|
|
Response : in out AWS.Response.Data;
|
|
Size : Stream_Element_Offset;
|
|
Undefined_Size : Boolean) is
|
|
begin
|
|
Delayed (Resource).Undefined_Size := Undefined_Size;
|
|
Delayed (Resource).Size := Size;
|
|
Delayed (Resource).Offset := 0;
|
|
Delayed (Resource).Response := Response;
|
|
|
|
AWS.Response.Message_Body (Response, Delayed(Resource).Handle);
|
|
end Create;
|
|
|
|
-----------------
|
|
-- End_Of_File --
|
|
-----------------
|
|
|
|
function End_Of_File
|
|
(Resource : Delayed) return Boolean is
|
|
begin
|
|
return Resource.Offset >= Resource.Size;
|
|
end End_Of_File;
|
|
|
|
----------
|
|
-- Read --
|
|
----------
|
|
|
|
procedure Read
|
|
(Resource : in out Delayed;
|
|
Buffer : out Stream_Element_Array;
|
|
Last : out Stream_Element_Offset)
|
|
is
|
|
use Ada.Text_IO;
|
|
|
|
Buffer_Length : constant Stream_Element_Offset := Buffer'Last;
|
|
Delay_Interval : constant Float := (Float (Buffer_Length) / 7168.0);
|
|
|
|
Data_Stream : Ada.Streams.Stream_Element_Array (1 .. Buffer_Length);
|
|
Data_Last : Ada.Streams.Stream_Element_Offset;
|
|
begin
|
|
Last := Buffer'First - 1;
|
|
|
|
AWS.Resources.Read (Resource.Handle, Data_Stream, Data_Last);
|
|
|
|
-- If our input stream is empty, might as well bail now, nothing to
|
|
-- write to the output stream
|
|
if Data_Last < 0 then
|
|
return;
|
|
end if;
|
|
|
|
delay Duration (Delay_Interval);
|
|
|
|
for I in 1 .. Data_Last loop
|
|
Buffer (I) := Data_Stream (I);
|
|
Last := I;
|
|
end loop;
|
|
end Read;
|
|
|
|
-----------
|
|
-- Reset --
|
|
-----------
|
|
|
|
procedure Reset (File : in out Delayed) is
|
|
begin
|
|
null;
|
|
end Reset;
|
|
|
|
---------------
|
|
-- Set_Index --
|
|
---------------
|
|
|
|
procedure Set_Index
|
|
(File : in out Delayed;
|
|
Position : Stream_Element_Offset) is
|
|
begin
|
|
null;
|
|
end Set_Index;
|
|
|
|
----------
|
|
-- Size --
|
|
----------
|
|
|
|
function Size (File : Delayed) return Stream_Element_Offset is
|
|
begin
|
|
if File.Undefined_Size then
|
|
return AWS.Resources.Undefined_Length;
|
|
else
|
|
return File.Size;
|
|
end if;
|
|
end Size;
|
|
|
|
end Delayed_Stream;
|