DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦2b166c312⟧ Ada Source

    Length: 6144 (0x1800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Dynamic_Object, seg_045e32

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



package body Dynamic_Object is


-- creation

    procedure New_Value (V : out Value) is
    begin
        V := (Kind => Undefined_Value);
    end New_Value;


-- access

    function Kind_Of (V : in Value) return Kind_Of_Values is
    begin
        return V.Kind;
    end Kind_Of;


    function Value_As (V : in Value) return Natural is
    begin
        if V.Kind = Natural_Value then
            return V.The_Natural;
        else
            raise No_Natural_Value;
        end if;
    end Value_As;


    function Value_As (V : in Value) return Boolean is
    begin
        if V.Kind = Boolean_Value then
            return V.The_Boolean;
        else
            raise No_Boolean_Value;
        end if;
    end Value_As;


    function Value_As (V : in Value) return Our_String.Variable_String is
    begin
        if V.Kind = String_Value then
            return V.The_String;
        else
            raise No_String_Value;
        end if;
    end Value_As;


    function Equal (V1 : in Value; V2 : in Value) return Boolean is
    begin
        if V1.Kind = V2.Kind then
            case V1.Kind is
                when Undefined_Value =>
                    return True;
                when Natural_Value =>
                    return (V1.The_Natural = V2.The_Natural);
                when Boolean_Value =>
                    return (V1.The_Boolean = V2.The_Boolean);
                when String_Value =>
                    return Our_String.Image (V1.The_String) =
                              Our_String.Image (V2.The_String);
            end case;
        else
            return False;
        end if;
    end Equal;


    function Image (V : in Value) return String is
    begin
        case V.Kind is
            when Undefined_Value =>
                return "Undefined value !!";
            when Natural_Value =>
                return Integer'Image (V.The_Natural);
            when Boolean_Value =>
                return Boolean'Image (V.The_Boolean);
            when String_Value =>
                return Our_String.Image (V.The_String);
        end case;  
    end Image;


-- modification

    procedure Undefine (V : in out Value) is
    begin
        Dispose (V);
        New_Value (V);
    end Undefine;


    procedure Set_To (V : in out Value; I : in Natural) is
    begin
        Undefine (V);
        V := (Kind => Natural_Value, The_Natural => I);
    end Set_To;


    procedure Set_To (V : in out Value; B : in Boolean) is
    begin
        Undefine (V);
        V := (Kind => Boolean_Value, The_Boolean => B);
    end Set_To;


    procedure Set_To (V : in out Value; S : in Our_String.Variable_String) is
    begin
        Undefine (V);
        V := (Kind => String_Value, The_String => S);
    end Set_To;


    procedure Copy (To_Value : in out Value; The_Value : in Value) is
    begin
        if The_Value.Kind = String_Value then
            Set_To (To_Value, The_Value.The_String);
        else
            Undefine (To_Value);
            To_Value := The_Value;
        end if;
    end Copy;

-- liberation

    procedure Dispose (V : in out Value) is
    begin
        if V.Kind = String_Value then
            Our_String.Free (V.The_String);
        end if;
        V := (Kind => Undefined_Value);
    end Dispose;


end Dynamic_Object;





E3 Meta Data

    nblk1=5
    nid=4
    hdr6=8
        [0x00] rec0=2e rec1=00 rec2=01 rec3=038
        [0x01] rec0=1f rec1=00 rec2=03 rec3=056
        [0x02] rec0=27 rec1=00 rec2=02 rec3=084
        [0x03] rec0=1a rec1=00 rec2=05 rec3=000
        [0x04] rec0=c0 rec1=00 rec2=00 rec3=100
    tail 0x215427126864c91b882a7 0x42a00088462060003
Free Block Chain:
  0x4: 0000  00 00 02 06 80 05 62 65 67 69 6e 05 00 2d 20 20  ┆      begin  -  ┆