| with Interfaces; |
| |
| use Interfaces; |
| |
| package FILO is |
| |
| type Partition_Length is range 0 .. Interfaces.Unsigned_64'Last; |
| subtype Partition_Offset is Partition_Length range 0 .. Partition_Length'Last - 1; |
| |
| BLOCK_SIZE : constant := 512; |
| type Block_Offset is range 0 .. Partition_Offset'Last / BLOCK_SIZE; |
| |
| subtype Index_Type is Natural range 0 .. Natural'Last - 1; |
| subtype Index_Type16 is Index_Type range 0 .. Index_Type'Last - 1; |
| subtype Index_Type32 is Index_Type16 range 0 .. Index_Type16'Last - 2; |
| |
| type Buffer_Type is array (Index_Type range <>) of Unsigned_8; |
| |
| function Read_LE16 (Buf : Buffer_Type; Off : Index_Type16) return Unsigned_16 |
| is |
| (Shift_Left (Unsigned_16 (Buf (Off + 1)), 8) or Unsigned_16 (Buf (Off))) |
| with |
| Pre => Buf'First <= Off and Off + 1 <= Buf'Last; |
| |
| function Read_LE32 (Buf : Buffer_Type; Off : Index_Type32) return Unsigned_32 |
| is |
| (Shift_Left (Unsigned_32 (Buf (Off + 3)), 24) or |
| Shift_Left (Unsigned_32 (Buf (Off + 2)), 16) or |
| Shift_Left (Unsigned_32 (Buf (Off + 1)), 8) or |
| Unsigned_32 (Buf (Off))) |
| with |
| Pre => Buf'First <= Off and Off + 3 <= Buf'Last; |
| |
| end FILO; |