-
+ 59000F9E3569F550C5994913E7BA3CDB6CBB964DEB307A47676B5FEBA9220F70B0BEF3F187B22A4E69948037E6A046ED91001BCB66ADAB6EEEE42199A0E84208
smg_comms/src/smg_comms_types.adb
(0 . 0)(1 . 69)
44 -- S.MG, 2018
45 -- prototype implementation of S.MG communication protocol
46
47 with SMG_comms_types; use SMG_comms_types;
48 with System; use System; -- endianness
49 with Ada.Exceptions;
50 with Ada.Streams; use Ada.Streams;
51
52 package body SMG_comms_types is
53
54 -- to and from network format (i.e. big endian, stream_element_array)
55 procedure ToNetworkFormat(
56 Item : in Octet_Array;
57 Buffer : out Stream_Element_Array) is
58 begin
59 if Item'Length /= Buffer'Length then
60 raise Constraint_Error with "Item and Buffer lengths do NOT match!";
61 end if;
62
63 if Default_Bit_Order = Low_Order_First then
64 for I in 0 .. Item'Length - 1 loop
65 Buffer( Buffer'Last - Stream_Element_Offset(I) ) := Stream_Element(Item(Item'First + I));
66 end loop;
67 else
68 for I in 0 .. Item'Length - 1 loop
69 Buffer( Buffer'First + Stream_Element_Offset(I) ) := Stream_Element(Item(Item'First + I));
70 end loop;
71 end if;
72 end ToNetworkFormat;
73
74 procedure FromNetworkFormat(
75 Buffer : in Stream_Element_Array;
76 Item : out Octet_Array) is
77 begin
78 if Item'Length /= Buffer'Length then
79 raise Constraint_Error with "Buffer and Item length do NOT match!";
80 end if;
81
82 if Default_Bit_Order = Low_Order_First then
83 for I in 0 .. Buffer'Length - 1 loop
84 Item( Item'Last - I ) :=
85 Unsigned_8( Buffer( Buffer'First + Stream_Element_Offset( I ) ) );
86 end loop;
87 else
88 for I in 0 .. Buffer'Length - 1 loop
89 Item( Item'First + I ) :=
90 Unsigned_8( Buffer( Buffer'First + Stream_Element_Offset( I ) ) );
91 end loop;
92 end if;
93 end FromNetworkFormat;
94
95 -- Integer_8
96 procedure ToNetworkFormat(
97 Item : in Integer_8;
98 Buffer : out Stream_Element_Array) is
99 begin
100 ToNetworkFormat( Cast( Item ), Buffer );
101 end ToNetworkFormat;
102
103 procedure FromNetworkFormat(
104 Buffer : in Stream_Element_Array;
105 Item : out Integer_8) is
106 octets: Octets_1;
107 begin
108 FromNetworkFormat(Buffer, octets);
109 Item := Cast( octets );
110 end FromNetworkFormat;
111
112 end SMG_comms_types;