File : blocks.adb
1 pragma Restrictions (No_Implicit_Heap_Allocations);
2
3 with VarInts; use VarInts;
4 with Dump; use Dump;
5
6 with ada.text_io;
7 use ada.text_io;
8 with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO;
9
10 with Transactions;
11 use Transactions.Traditional;
12 with Dump; use Dump;
13
14
15 package body Blocks is
16
17
18 procedure Block_Read(Stream : not null access Root_Stream_Type'Class;
19 B : out Block) is
20
21 T : Tx;
22 My_File : Ada.Streams.Stream_IO.FILE_TYPE;
23 My_File_Access : Ada.Streams.Stream_IO.STREAM_ACCESS;
24 begin
25 Ada.Streams.Stream_IO.Create(My_File, Out_File, "out");
26 My_File_Access := Ada.Streams.Stream_IO.Stream(My_File);
27
28
29 -- Read block header
30 BlockHeader'Read(Stream, B.Header);
31 ----
32 BlockHeader'Write(My_File_Access, B.Header);
33 ----
34 -- Read count of transactions
35 VarInt'Read(Stream, VarInt(B.Tx_N));
36 ----
37 VarInt'Write(My_File_Access, VarInt(B.Tx_N));
38 ----
39
40 -- Read transactions
41 for I in 1 .. B.Tx_N loop
42
43 Put_Line("Txn # " & I'Image);
44 TradTx_Read(Stream, T);
45
46 Put_Line("Hash:");
47 HexDumpRev(Stream_Element_Array(T.Hash));
48 Put_Line("Mass == " & T.NBytes'Image);
49
50 TradTx_Write(My_File_Access, T);
51
52 end loop;
53
54 Put_Line("Read txn: " & B.Tx_N'Image);
55 end;
56
57
58 procedure Block_Write(Stream : not null access Root_Stream_Type'Class;
59 B : in Block) is
60 begin
61 -- Write block header
62 BlockHeader'Write(Stream, B.Header);
63 -- Write count of transactions
64 VarInt'Write(Stream, VarInt(B.Tx_N));
65 -- Write transactions
66
67 -- .......
68
69 end;
70
71 end Blocks;