Skip to content

Commit

Permalink
Improve size functions
Browse files Browse the repository at this point in the history
Ref. #908
  • Loading branch information
treiher committed May 18, 2022
1 parent 016b925 commit 781f738
Show file tree
Hide file tree
Showing 115 changed files with 406 additions and 842 deletions.
51 changes: 7 additions & 44 deletions rflx/generator/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -2024,24 +2024,13 @@ def create_size_function() -> UnitPart:
],
)
],
[
private=[
ExpressionFunctionDeclaration(
specification,
If(
[
(
Equal(
Variable("Ctx.Verified_Last"),
Sub(Variable("Ctx.First"), Number(1)),
),
Number(0),
)
],
Add(
Variable("Ctx.Verified_Last"),
-Variable("Ctx.First"),
Number(1),
),
Add(
Variable("Ctx.Verified_Last"),
-Variable("Ctx.First"),
Number(1),
),
)
],
Expand All @@ -2057,38 +2046,12 @@ def create_byte_size_function() -> UnitPart:
[
SubprogramDeclaration(
specification,
[
Postcondition(
Equal(
Result("Byte_Size"),
Call(const.TYPES_TO_LENGTH, [Call("Size", [Variable("Ctx")])]),
)
),
],
)
],
[
private=[
ExpressionFunctionDeclaration(
specification,
If(
[
(
Equal(
Variable("Ctx.Verified_Last"),
Sub(Variable("Ctx.First"), Number(1)),
),
Number(0),
)
],
Indexed(
Variable(const.TYPES_LENGTH),
Add(
Call(const.TYPES_TO_INDEX, [Variable("Ctx.Verified_Last")]),
-Call(const.TYPES_TO_INDEX, [Variable("Ctx.First")]),
Number(1),
),
),
),
Call(const.TYPES_TO_LENGTH, [Call("Size", [Variable("Ctx")])]),
)
],
)
Expand Down
11 changes: 0 additions & 11 deletions tests/integration/messages/generated/rflx-universal-message.adb
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
10 changes: 7 additions & 3 deletions tests/integration/messages/generated/rflx-universal-message.ads
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,7 @@ is
Post =>
Size'Result rem RFLX_Types.Byte'Size = 0;

function Byte_Size (Ctx : Context) return RFLX_Types.Length with
Post =>
Byte_Size'Result = RFLX_Types.To_Length (Size (Ctx));
function Byte_Size (Ctx : Context) return RFLX_Types.Length;

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length with
Pre =>
Expand Down Expand Up @@ -1346,6 +1344,12 @@ private
function Buffer_Length (Ctx : Context) return RFLX_Types.Length is
(Ctx.Buffer'Length);

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last - Ctx.First + 1);

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
(RFLX_Types.To_Length (Size (Ctx)));

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last);

Expand Down
11 changes: 0 additions & 11 deletions tests/integration/messages/generated/rflx-universal-option.adb
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
10 changes: 7 additions & 3 deletions tests/integration/messages/generated/rflx-universal-option.ads
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,7 @@ is
Post =>
Size'Result rem RFLX_Types.Byte'Size = 0;

function Byte_Size (Ctx : Context) return RFLX_Types.Length with
Post =>
Byte_Size'Result = RFLX_Types.To_Length (Size (Ctx));
function Byte_Size (Ctx : Context) return RFLX_Types.Length;

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length with
Pre =>
Expand Down Expand Up @@ -715,6 +713,12 @@ private
function Buffer_Length (Ctx : Context) return RFLX_Types.Length is
(Ctx.Buffer'Length);

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last - Ctx.First + 1);

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
(RFLX_Types.To_Length (Size (Ctx)));

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,7 @@ is
Post =>
Size'Result rem RFLX_Types.Byte'Size = 0;

function Byte_Size (Ctx : Context) return RFLX_Types.Length with
Post =>
Byte_Size'Result = RFLX_Types.To_Length (Size (Ctx));
function Byte_Size (Ctx : Context) return RFLX_Types.Length;

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length with
Pre =>
Expand Down Expand Up @@ -1346,6 +1344,12 @@ private
function Buffer_Length (Ctx : Context) return RFLX_Types.Length is
(Ctx.Buffer'Length);

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last - Ctx.First + 1);

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
(RFLX_Types.To_Length (Size (Ctx)));

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,7 @@ is
Post =>
Size'Result rem RFLX_Types.Byte'Size = 0;

function Byte_Size (Ctx : Context) return RFLX_Types.Length with
Post =>
Byte_Size'Result = RFLX_Types.To_Length (Size (Ctx));
function Byte_Size (Ctx : Context) return RFLX_Types.Length;

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length with
Pre =>
Expand Down Expand Up @@ -715,6 +713,12 @@ private
function Buffer_Length (Ctx : Context) return RFLX_Types.Length is
(Ctx.Buffer'Length);

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last - Ctx.First + 1);

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
(RFLX_Types.To_Length (Size (Ctx)));

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,7 @@ is
Post =>
Size'Result rem RFLX_Types.Byte'Size = 0;

function Byte_Size (Ctx : Context) return RFLX_Types.Length with
Post =>
Byte_Size'Result = RFLX_Types.To_Length (Size (Ctx));
function Byte_Size (Ctx : Context) return RFLX_Types.Length;

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length with
Pre =>
Expand Down Expand Up @@ -614,6 +612,12 @@ private
function Buffer_Length (Ctx : Context) return RFLX_Types.Length is
(Ctx.Buffer'Length);

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last - Ctx.First + 1);

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
(RFLX_Types.To_Length (Size (Ctx)));

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,9 +233,7 @@ is
Post =>
Size'Result rem RFLX_Types.Byte'Size = 0;

function Byte_Size (Ctx : Context) return RFLX_Types.Length with
Post =>
Byte_Size'Result = RFLX_Types.To_Length (Size (Ctx));
function Byte_Size (Ctx : Context) return RFLX_Types.Length;

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length with
Pre =>
Expand Down Expand Up @@ -742,6 +740,12 @@ private
function Buffer_Length (Ctx : Context) return RFLX_Types.Length is
(Ctx.Buffer'Length);

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last - Ctx.First + 1);

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
(RFLX_Types.To_Length (Size (Ctx)));

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,7 @@ is
Post =>
Size'Result rem RFLX_Types.Byte'Size = 0;

function Byte_Size (Ctx : Context) return RFLX_Types.Length with
Post =>
Byte_Size'Result = RFLX_Types.To_Length (Size (Ctx));
function Byte_Size (Ctx : Context) return RFLX_Types.Length;

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length with
Pre =>
Expand Down Expand Up @@ -1346,6 +1344,12 @@ private
function Buffer_Length (Ctx : Context) return RFLX_Types.Length is
(Ctx.Buffer'Length);

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last - Ctx.First + 1);

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
(RFLX_Types.To_Length (Size (Ctx)));

function Message_Last (Ctx : Context) return RFLX_Types.Bit_Length is
(Ctx.Verified_Last);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ is
Ctx.Written_Last := RFLX_Types.Bit_Index'Max (Ctx.Written_Last, RFLX_Types.To_Last_Bit_Index (RFLX_Types.Length (Ctx.Buffer_First) + Offset + Length - 1));
end Generic_Write;

function Size (Ctx : Context) return RFLX_Types.Bit_Length is
((if Ctx.Verified_Last = Ctx.First - 1 then 0 else Ctx.Verified_Last - Ctx.First + 1));

function Byte_Size (Ctx : Context) return RFLX_Types.Length is
((if
Ctx.Verified_Last = Ctx.First - 1
then
0
else
RFLX_Types.Length (RFLX_Types.To_Index (Ctx.Verified_Last) - RFLX_Types.To_Index (Ctx.First) + 1)));

procedure Data (Ctx : Context; Data : out RFLX_Types.Bytes) is
begin
Data := Ctx.Buffer.all (RFLX_Types.To_Index (Ctx.First) .. RFLX_Types.To_Index (Ctx.Verified_Last));
Expand Down
Loading

0 comments on commit 781f738

Please sign in to comment.