|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 15360 (0x3c00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Operators, package body Unconstrained_Array, seg_03afb0, seg_03b92b, seg_03c0a3, seg_03c50e, seg_03c6b5, seg_03c9ea, seg_04a9c1, seg_04b42f
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
package body Unconstrained_Array is
type Object_Structure (Kind : Types := Integer; Size : Natural := 0) is
record
case Kind is
when Integer =>
The_Integer : Standard.Integer := 0;
when Boolean =>
The_Boolean : Standard.Boolean := Standard.False;
when Collection =>
The_Collection : Objects (1 .. Size) := Null_Objects;
when Undefined =>
null;
end case;
end record;
function Value (I : Standard.Integer) return Object is
begin
return new Object_Structure'(Kind => Integer,
Size => 0,
The_Integer => I);
end Value;
function Value (B : Standard.Boolean) return Object is
begin
return new Object_Structure'(Kind => Boolean,
Size => 0,
The_Boolean => B);
end Value;
function Value (The_Objects : Objects) return Object is
begin
return new Object_Structure'(Kind => Collection,
Size => The_Objects'
Last,
The_Collection => The_Objects);
end Value;
function Get (The_Object : Object) return Standard.Integer is
begin
return The_Object.The_Integer;
end Get;
function Get (The_Object : Object) return Standard.Boolean is
begin
return The_Object.The_Boolean;
end Get;
function Get (The_Object : Object; The_Position : Natural) return Object is
begin
return The_Object.The_Collection (The_Position);
end Get;
procedure Set (The_Object : in out Object; To : Standard.Integer) is
begin
The_Object.all := (Kind => Integer, Size => 0, The_Integer => To);
end Set;
procedure Set (The_Object : in out Object; To : Standard.Boolean) is
begin
The_Object.all := (Kind => Boolean, Size => 0, The_Boolean => To);
end Set;
procedure Set (The_Object : in out Object; To : Objects) is
begin
The_Object.all :=
(Kind => Collection, Size => To'Last, The_Collection => To);
end Set;
function Undefined_Value return Object is
begin
return Null_Object;
end Undefined_Value;
function Is_Undefined (The_Object : Object) return Standard.Boolean is
begin
return The_Object = Null_Object;
end Is_Undefined;
procedure Make_Undefined (The_Object : in out Object) is
begin
The_Object := Null_Object;
end Make_Undefined;
function Have_Same_Type (Left, Right : Object) return Standard.Boolean is
begin
return Left.Kind = Right.Kind;
end Have_Same_Type;
procedure Put (The_Objects : Objects; Where : Output_Stream.Object) is
begin
for I in The_Objects'Range loop
Put (The_Objects (I), Where);
end loop;
end Put;
procedure Put (The_Object : Object; Where : Output_Stream.Object) is
begin
case The_Object.Kind is
when Integer =>
Output_Stream.Put (The_Object.The_Integer, Where);
when Boolean =>
Output_Stream.Put (The_Object.The_Boolean, Where);
when Collection =>
Put (The_Object.The_Collection, Where);
when Undefined =>
Output_Stream.Put ("undefined slot value", Where);
end case;
end Put;
package body Operators is
function "=" (Left, Right : Object) return Standard.Boolean is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Left.The_Integer = Right.The_Integer;
when Boolean =>
return Left.The_Boolean = Right.The_Boolean;
when Collection =>
if Left.The_Collection'Length =
Right.The_Collection'Length then
for I in Left.The_Collection'Range loop
if not (Left.The_Collection (I) =
Right.The_Collection (I)) then
return Standard.False;
end if;
end loop;
end if;
when Undefined =>
null;
end case;
return Standard.True;
else
return Standard.False;
end if;
end "=";
function "<" (Left, Right : Object) return Standard.Boolean is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Left.The_Integer < Right.The_Integer;
when Boolean =>
return Left.The_Boolean < Right.The_Boolean;
when Undefined | Collection =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end "<";
function "<=" (Left, Right : Object) return Standard.Boolean is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Left.The_Integer <= Right.The_Integer;
when Boolean =>
return Left.The_Boolean <= Right.The_Boolean;
when Undefined | Collection =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end "<=";
function ">" (Left, Right : Object) return Standard.Boolean is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Left.The_Integer > Right.The_Integer;
when Boolean =>
return Left.The_Boolean > Right.The_Boolean;
when Undefined | Collection =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end ">";
function ">=" (Left, Right : Object) return Standard.Boolean is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Left.The_Integer >= Right.The_Integer;
when Boolean =>
return Left.The_Boolean >= Right.The_Boolean;
when Undefined | Collection =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end ">=";
function "+" (Left, Right : Object) return Object is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Value (Left.The_Integer + Right.The_Integer);
when others =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end "+";
function "-" (Left, Right : Object) return Object is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Value (Left.The_Integer - Right.The_Integer);
when others =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end "-";
function "*" (Left, Right : Object) return Object is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Value (Left.The_Integer * Right.The_Integer);
when others =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end "*";
function "/" (Left, Right : Object) return Object is
begin
if Left.Kind = Right.Kind then
case Left.Kind is
when Integer =>
return Value (Left.The_Integer / Right.The_Integer);
when others =>
raise Illegal_Operation;
end case;
else
raise Typing_Error;
end if;
end "/";
function "-" (Right : Object) return Object is
begin
case Right.Kind is
when Integer =>
return Value (-Right.The_Integer);
when others =>
raise Illegal_Operation;
end case;
end "-";
function "abs" (Right : Object) return Object is
begin
case Right.Kind is
when Integer =>
return Value (abs Right.The_Integer);
when others =>
raise Illegal_Operation;
end case;
end "abs";
end Operators;
end Unconstrained_Array;
nblk1=e
nid=9
hdr6=18
[0x00] rec0=1d rec1=00 rec2=01 rec3=018
[0x01] rec0=20 rec1=00 rec2=04 rec3=070
[0x02] rec0=26 rec1=00 rec2=05 rec3=08c
[0x03] rec0=21 rec1=00 rec2=03 rec3=03c
[0x04] rec0=15 rec1=00 rec2=0e rec3=048
[0x05] rec0=05 rec1=00 rec2=0c rec3=05e
[0x06] rec0=18 rec1=00 rec2=0d rec3=058
[0x07] rec0=1c rec1=00 rec2=0b rec3=036
[0x08] rec0=1d rec1=00 rec2=0a rec3=01c
[0x09] rec0=1d rec1=00 rec2=08 rec3=050
[0x0a] rec0=1f rec1=00 rec2=06 rec3=014
[0x0b] rec0=08 rec1=00 rec2=02 rec3=000
[0x0c] rec0=24 rec1=00 rec2=0f rec3=011
[0x0d] rec0=80 rec1=00 rec2=00 rec3=002
tail 0x217383b788512661c6692 0x42a00088462063c03
Free Block Chain:
0x9: 0000 00 07 00 18 80 04 65 67 69 6e 04 00 0e 20 20 20 ┆ egin ┆
0x7: 0000 00 00 00 22 80 1f 20 4c 65 66 74 2e 54 68 65 5f ┆ " Left.The_┆