+ IO.Readers

This commit is contained in:
Vovanium 2023-08-01 23:21:01 +03:00
parent 92c7e13849
commit 6c7641422f
4 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,32 @@
with Ada.Unchecked_Conversion;
package body Video.IO.Readers.LE is
procedure Read (Reader : in out LE_Reader; Data : out Unsigned_16) is
Buf : Unsigned_8_Array (0 .. 1);
begin
Reader.Read (Buf);
Data := Unsigned_16 (Buf (0))
+ Shift_Left (Unsigned_16 (Buf (1)), 8);
end Read;
procedure Read (Reader : in out LE_Reader; Data : out Unsigned_32) is
Buf : Unsigned_8_Array (0 .. 3);
begin
Reader.Read (Buf);
Data := Unsigned_32 (Buf (0))
+ Shift_Left (Unsigned_32 (Buf (1)), 8)
+ Shift_Left (Unsigned_32 (Buf (2)), 16)
+ Shift_Left (Unsigned_32 (Buf (3)), 24);
end Read;
function To_Integer_32 is new Ada.Unchecked_Conversion (Source => Unsigned_32, Target => Integer_32);
procedure Read (Reader : in out LE_Reader; Data : out Integer_32) is
T : Unsigned_32;
begin
Reader.Read (T);
Data := To_Integer_32 (T);
end Read;
end Video.IO.Readers.LE;

View File

@ -0,0 +1,10 @@
package Video.IO.Readers.LE is
type LE_Reader is new Base_Reader with null record;
procedure Read (Reader : in out LE_Reader; Data : out Unsigned_16);
procedure Read (Reader : in out LE_Reader; Data : out Unsigned_32);
procedure Read (Reader : in out LE_Reader; Data : out Integer_32);
end Video.IO.Readers.LE;

View File

@ -0,0 +1,15 @@
package body Video.IO.Readers is
procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8) is
begin
Unsigned_8'Read (Reader.Stream, Data);
Reader.Pos := Reader.Pos + 1;
end Read;
procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8_Array) is
begin
Unsigned_8_Array'Read (Reader.Stream, Data);
Reader.Pos := Reader.Pos + Data'Length;
end Read;
end Video.IO.Readers;

View File

@ -0,0 +1,16 @@
with Interfaces;
use Interfaces;
package Video.IO.Readers is
type Unsigned_8_Array is array (Integer range <>) of Unsigned_8;
type Base_Reader is tagged limited record
Stream : access Ada.Streams.Root_Stream_Type'Class;
Pos : Integer := 0;
end record;
procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8);
procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8_Array);
end Video.IO.Readers;