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

⟦4b17bb01e⟧ Ada Source

    Length: 29696 (0x7400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Object_Manager, seg_05711b

Derivation

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

E3 Source Code



with Method;
with Byte_Defs;  
with Bounded_String;
with Liste_Parametre;
with Transport_Defs;
with My_Channel_User;  
with Bls_Constant;
with Registrated_Object;
with Utils;
with Task_Io;

package body Object_Manager is  
    function Null_Id return Object_Id is
    begin
        return Object_Id (Parametre_Defs.Unknown_Object);
    end Null_Id;  
    function Is_Equal (Left, Right : Object_Id) return Boolean is
    begin
        return Byte_Defs."=" (Byte_Defs.Byte_String
                                 (Parametre_Defs.Identificator (Left)),
                              Byte_Defs.Byte_String
                                 (Parametre_Defs.Identificator (Right)));
    end Is_Equal;
    function Get_Socket (Id : Parametre_Defs.Identificator)
                        return Transport_Defs.Socket_Id is
    begin
        return Transport_Defs.Socket_Id
                  (Id (1 .. Bls_Constant.Size_Of_Our_Socket_Id));
    end Get_Socket;


    function Get_Host (Id : Parametre_Defs.Identificator)
                      return Transport_Defs.Host_Id is  
    begin
        return Transport_Defs.Host_Id
                  (Id (Bls_Constant.Size_Of_Our_Socket_Id + 1 ..
                          Bls_Constant.Size_Of_Our_Socket_Id +
                             Bls_Constant.Size_Of_Address));
    end Get_Host;

    function Image (D_B : Object) return String is  
        Iter : Registrated_Objects.S_Iterator;
        The_Value : Bounded_String.Variable_String (1024);
    begin
        begin
            if not Registrated_Objects.Is_Empty
                      (Registrated_Objects.S_List (D_B.List)) then
                Registrated_Objects.Init
                   (Iter, Registrated_Objects.S_List (D_B.List));
                while not (Registrated_Objects.Done (Iter)) loop
                    Bounded_String.Append
                       (The_Value, Registrated_Object.Image
                                      (Registrated_Objects.Value (Iter)));
                    Bounded_String.Append (The_Value,
                                           Parametre_Defs.Message_Separator);
                    Bounded_String.Append (The_Value, Ascii.Lf);

                    Bounded_String.Append (The_Value, Ascii.Cr);
                    Registrated_Objects.Next (Iter);
                end loop;  
            end if;
            return Bounded_String.Image (The_Value);
        end;
    exception
        when Constraint_Error =>
            Task_Io.Put_Line
               ("object_manager.image =>size of bounded string to short");

    end Image;


    function Get_Object_By_Id (The_Orb : Object;
                               Id : Parametre_Defs.Identificator)
                              return Registrated_Object.Object is  
        Iter : Registrated_Objects.S_Iterator;
        The_Value : Parametre.Variable_String;
        An_Object : Registrated_Object.Object;

    begin
        if not Registrated_Objects.Is_Empty
                  (Registrated_Objects.S_List (The_Orb.List)) then
            Registrated_Objects.Init
               (Iter, Registrated_Objects.S_List (The_Orb.List));
            while not (Registrated_Objects.Done (Iter)) loop


                An_Object := Registrated_Objects.Value (Iter);
                if Byte_Defs."=" (Byte_Defs.Byte_String
                                     (Registrated_Object.Get_Id (An_Object)),
                                  Byte_Defs.Byte_String (Id)) then
                    return An_Object;
                end if;
                Registrated_Objects.Next (Iter);
            end loop;
            return Registrated_Object.Null_Object;
        end if;


    end Get_Object_By_Id;

    function Search_Object_Doing_Method
                (Data_Base : Object;
                 Class : Parametre.Variable_String;
                 Method : Parametre.Variable_String) return Objects_Id.S_List is
        Iter : Registrated_Objects.S_Iterator;
        Id_List : Objects_Id.S_List;  
        The_Value : Parametre.Variable_String;
        An_Object : Registrated_Object.Object;


    begin  
        Id_List := Objects_Id.Nil;
        if not Registrated_Objects.Is_Empty
                  (Registrated_Objects.S_List (Data_Base.List)) then
            Registrated_Objects.Init
               (Iter, Registrated_Objects.S_List (Data_Base.List));
            while not (Registrated_Objects.Done (Iter)) loop
                An_Object := Registrated_Objects.Value (Iter);
                if Bounded_String.Image
                      (Registrated_Object.Get_Class (An_Object)) =
                   Bounded_String.Image (Class) and
                   Registrated_Object.Is_Method (An_Object, Method) then  
                    Id_List :=
                       Objects_Id.Make
                          (Object_Id (Registrated_Object.Get_Id (An_Object)),
                           Id_List);

                end if;
                Registrated_Objects.Next (Iter);

            end loop;  
            return Id_List;
        end if;

    end Search_Object_Doing_Method;


    function Search_Method_By_Object_Id
                (Data_Base : Object;
                 Object : Parametre_Defs.Identificator;
                 Method : Parametre.Variable_String) return Object_Id is
        Iter : Registrated_Objects.S_Iterator;
        The_Value : Parametre.Variable_String;
        An_Object : Registrated_Object.Object;

    begin
        if not Registrated_Objects.Is_Empty
                  (Registrated_Objects.S_List (Data_Base.List)) then
            Registrated_Objects.Init
               (Iter, Registrated_Objects.S_List (Data_Base.List));
            while not (Registrated_Objects.Done (Iter)) loop
                An_Object := Registrated_Objects.Value (Iter);
                if (Byte_Defs."=" (Byte_Defs.Byte_String
                                      (Registrated_Object.Get_Id (An_Object)),
                                   Byte_Defs.Byte_String (Object)) and
                    Registrated_Object.Is_Method (An_Object, Method)) then  
                    return Object_Id ((Registrated_Object.Get_Id (An_Object)));
                end if;
                Registrated_Objects.Next (Iter);
            end loop;
        end if;
        return Object_Id (Parametre_Defs.Orb);

    end Search_Method_By_Object_Id;


    procedure Add_Object (D_B : in out Object;
                          Id : out Object_Id;
                          In_Mess : Message.Object;
                          Out_Mess : in out Message.Object) is
        Containt : Liste_Parametre.List;
        Iter : Liste_Parametre.Iterator;
        New_Object : Registrated_Object.Object;
        Class : Parametre.Variable_String;
        Socket : Transport_Defs.Socket_Id
                    (1 .. Bls_Constant.Size_Of_Our_Socket_Id);
        Host : Transport_Defs.Host_Id (1 .. Bls_Constant.Size_Of_Address);
        The_User_Channel : My_Channel_User.Object;
        New_Dest : Parametre_Defs.Identificator;
        Result : Boolean;
    begin
        Containt := Message.Get_Containt (In_Mess);
        Liste_Parametre.Init (Iter, Containt);
        Class := Liste_Parametre.Value (Iter);

        Socket := Get_Socket (Message.Get_Emet (In_Mess));
        Host := Get_Host (Message.Get_Emet (In_Mess));
        Registrated_Object.Init (New_Object, Class, Socket, Host, Result);
        New_Dest := Registrated_Object.Get_Id (New_Object);
        Message.Create (O => Out_Mess,
                        Emet => Parametre_Defs.Orb,
                        Dest => New_Dest,
                        Typed => Message.Get_Type (In_Mess),
                        Number => Message.Get_Number (In_Mess),
                        Content => Liste_Parametre.Nil);  
        Id := Object_Id (New_Dest);
        D_B.List := (Registrated_Objects.Make (New_Object, (D_B.List)));
    end Add_Object;


    procedure Talk_To_Object (Data_Base : Object;
                              Id : Object_Id;
                              Mess : in out Message.Object;
                              Result : out Boolean) is  
        The_Object : Registrated_Object.Object;
        The_User_Channel : My_Channel_User.Object;
        Nobody_Msg : Parametre_Defs.Identificator;
    begin
        The_Object := Get_Object_By_Id
                         (The_Orb => Data_Base,
                          Id => Parametre_Defs.Identificator (Id));
        The_User_Channel := Registrated_Object.Get_Channel (The_Object);
        Message.Send (Mess, The_User_Channel);  
        Nobody_Msg := Parametre_Defs.Identificator
                         (Utils.String_To_Byte_String
                             (My_Channel_User.Error_Msg
                                 (1 .. Bls_Constant.Size_Of_Our_Socket_Id +
                                          Bls_Constant.Size_Of_Address)));
        if Is_Equal (Object_Id (Message.Get_Emet (Mess)),
                     Object_Id (Nobody_Msg)) then  
            Result := False;
        else
            Result := True;
        end if;
    end Talk_To_Object;

    procedure Set_To_Free (D_B : in out Object; Id : Object_Id) is
        The_Object : Registrated_Object.Object;  
        The_Object_Copy : Registrated_Object.Object;
    begin
        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        The_Object_Copy :=
           Get_Object_By_Id (The_Orb => D_B,
                             Id => Parametre_Defs.Identificator (Id));


        Registrated_Object.Ready_For_Work (The_Object);
        Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
        Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);

    end Set_To_Free;
    function Is_Unknown (D_B : Object; Id : Object_Id) return Boolean is
        The_Object : Registrated_Object.Object;  
    begin
        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        return Registrated_Object.Is_Unknown (O => The_Object);
    end Is_Unknown;

    procedure Set_To_Unknow (D_B : in out Object; Id : Object_Id) is
        The_Object : Registrated_Object.Object;  
        The_Object_Copy : Registrated_Object.Object;
    begin
        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        The_Object_Copy :=
           Get_Object_By_Id (The_Orb => D_B,
                             Id => Parametre_Defs.Identificator (Id));


        Registrated_Object.Set_To_Unknown (The_Object);
        Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
        Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);
    end Set_To_Unknow;


    procedure Give_Work (D_B : in out Object; Id : Object_Id) is
        The_Object : Registrated_Object.Object;
        The_Object_Copy : Registrated_Object.Object;
    begin

        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        The_Object_Copy :=
           Get_Object_By_Id (The_Orb => D_B,
                             Id => Parametre_Defs.Identificator (Id));


        Registrated_Object.Give_Work (The_Object);
        Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
        Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);
    end Give_Work;


    procedure Work_Finished (D_B : in out Object; Id : Object_Id) is
        The_Object : Registrated_Object.Object;
        The_Object_Copy : Registrated_Object.Object;
    begin
        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        The_Object_Copy :=
           Get_Object_By_Id (The_Orb => D_B,
                             Id => Parametre_Defs.Identificator (Id));


        Registrated_Object.Work_Finished (The_Object);
        Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
        Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);
    end Work_Finished;


    procedure Remove_Object (D_B : in out Object; Id : in Object_Id) is
        The_Object, The_Object_Copy : Registrated_Object.Object;
    begin
        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        The_Object_Copy :=
           Get_Object_By_Id (The_Orb => D_B,
                             Id => Parametre_Defs.Identificator (Id));
        Registrated_Object.Close_Channel (The_Object);
        Registrated_Objects.Remove (X => The_Object_Copy, L => D_B.List);


    end Remove_Object;


    procedure Add_Method
                 (D_B : in out Object; Id : Object_Id; Mess : Message.Object) is
        The_Object : Registrated_Object.Object;
        The_Object_Copy : Registrated_Object.Object;  
        Param_Iter : Liste_Parametre.Iterator;
        In_Parameters, Out_Parameters : Liste_Parametre.List;
        Containt : Liste_Parametre.List;
        Class, Method_N, Nb_Param : Parametre.Variable_String;
        The_Method : Method.Object;

    begin         Containt := Message.Get_Containt (Mess);
        Liste_Parametre.Init (Param_Iter, Containt);
        Class := Liste_Parametre.Value (Param_Iter);
        Liste_Parametre.Next (Param_Iter);
        Method_N := Liste_Parametre.Value (Param_Iter);
        Liste_Parametre.Next (Param_Iter);
        Nb_Param := Liste_Parametre.Value (Param_Iter);
        Liste_Parametre.Next (Param_Iter);
        for I in 1 .. Integer'Value (Bounded_String.Image (Nb_Param)) loop
            In_Parameters :=
               Liste_Parametre.Make
                  (Liste_Parametre.Value (Param_Iter), In_Parameters);
            Liste_Parametre.Next (Param_Iter);
        end loop;
        Nb_Param := Liste_Parametre.Value (Param_Iter);
        Liste_Parametre.Next (Param_Iter);

        for I in 1 .. Integer'Value (Bounded_String.Image (Nb_Param)) loop
            Out_Parameters :=
               Liste_Parametre.Make
                  (Liste_Parametre.Value (Param_Iter), Out_Parameters);
            Liste_Parametre.Next (Param_Iter);
        end loop;
        Method.Init (O => The_Method,
                     Name => Method_N,
                     In_Parameters => In_Parameters,
                     Out_Parameters => Out_Parameters);


        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        The_Object_Copy :=
           Get_Object_By_Id (The_Orb => D_B,
                             Id => Parametre_Defs.Identificator (Id));


        if Registrated_Object.Is_Unknown (The_Object) then
            Registrated_Object.Ready_For_Work (The_Object);
        end if;
        Registrated_Object.Add_Method (O => The_Object, Meth => The_Method);
        Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
        Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);
    end Add_Method;


    procedure Remove_Method
                 (D_B : in out Object; Id : Object_Id; Mess : Message.Object) is
        Param_Iter : Liste_Parametre.Iterator;
        Containt : Liste_Parametre.List;
        Class, Method_N : Parametre.Variable_String;
        The_Object : Registrated_Object.Object;
        The_Object_Copy : Registrated_Object.Object;


    begin
        Containt := Message.Get_Containt (Mess);
        Liste_Parametre.Init (Param_Iter, Containt);
        Class := Liste_Parametre.Value (Param_Iter);
        Liste_Parametre.Next (Param_Iter);
        Method_N := Liste_Parametre.Value (Param_Iter);
        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Id));
        The_Object_Copy :=
           Get_Object_By_Id (The_Orb => D_B,
                             Id => Parametre_Defs.Identificator (Id));
        Registrated_Object.Remove_Method (O => The_Object, Meth => Method_N);
        Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
        Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);

    end Remove_Method;


    procedure Subscribe (D_B : in out Object;
                         Subscripter_Id, Subscripted_Id : Object_Id;
                         Mess : Message.Object) is

        The_Object : Registrated_Object.Object;
        The_Object_Copy : Registrated_Object.Object;
        Param_Iter : Liste_Parametre.Iterator;
        Containt : Liste_Parametre.List;
        Class, Method_N : Parametre.Variable_String;
        The_Method, The_Method_Copy : Method.Object;
    begin  
        Containt := Message.Get_Containt (Mess);
        Liste_Parametre.Init (Param_Iter, Containt);
        Class := Liste_Parametre.Value (Param_Iter);
        Liste_Parametre.Next (Param_Iter);
        Method_N := Liste_Parametre.Value (Param_Iter);


        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Subscripted_Id));
        The_Object_Copy := Get_Object_By_Id (The_Orb => D_B,
                                             Id => Parametre_Defs.Identificator
                                                      (Subscripted_Id));
        Task_Io.Put_Line ("the object to subscribe is" &
                          Registrated_Object.Image (The_Object));
        if (Registrated_Object.Is_Method (The_Object, Method_N)) then
            The_Method := Registrated_Object.Get_Method
                             (O => The_Object, Meth => Method_N);
            The_Method_Copy := Registrated_Object.Get_Method
                                  (O => The_Object, Meth => Method_N);  
            Method.Add_Subscripted_Object
               (O => The_Method,
                The_Object => Parametre_Defs.Identificator (Subscripter_Id));
            Registrated_Object.Replace_Method
               (The_Object, The_Method_Copy, The_Method);
            Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
            Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);
        else
            Task_Io.Put_Line
               ("do not found the specified method in any object");
        end if;

    end Subscribe;


    procedure Unsubscribe (D_B : in out Object;
                           Subscripter_Id, Subscripted_Id : Object_Id;
                           Mess : Message.Object) is
        The_Object : Registrated_Object.Object;
        The_Object_Copy : Registrated_Object.Object;
        Param_Iter : Liste_Parametre.Iterator;
        Containt : Liste_Parametre.List;
        Class, Method_N : Parametre.Variable_String;
        The_Method : Method.Object;
    begin
        Containt := Message.Get_Containt (Mess);
        Liste_Parametre.Init (Param_Iter, Containt);
        Class := Liste_Parametre.Value (Param_Iter);
        Liste_Parametre.Next (Param_Iter);
        Method_N := Liste_Parametre.Value (Param_Iter);


        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Subscripted_Id));
        The_Object_Copy := Get_Object_By_Id (The_Orb => D_B,
                                             Id => Parametre_Defs.Identificator
                                                      (Subscripted_Id));
        The_Method := Registrated_Object.Get_Method
                         (O => The_Object, Meth => Method_N);
        Method.Remove_Subscripted_Object
           (O => The_Method,
            The_Object => Parametre_Defs.Identificator (Subscripted_Id));
        Registrated_Object.Remove_Method (The_Object, Method_N);
        Registrated_Object.Add_Method (The_Object, The_Method);
        Registrated_Objects.Put_First (X => The_Object_Copy, L => D_B.List);
        Registrated_Objects.Set_First (L => D_B.List, To_Be => The_Object);


    end Unsubscribe;


    function Get_All_Subscripter (D_B : in Object;
                                  Subscripted : Object_Id;
                                  Method_N : Parametre.Variable_String)
                                 return Objects_Id.S_List is
        The_Object : Registrated_Object.Object;
        The_Method : Method.Object;
        Id_List : Objects_Id.S_List;
        Subter_List : Method.Sub_List.S_List;
        Sub_Iter : Method.Sub_List.S_Iterator;
    begin  
        The_Object := Get_Object_By_Id
                         (The_Orb => D_B,
                          Id => Parametre_Defs.Identificator (Subscripted));
        The_Method := Registrated_Object.Get_Method
                         (O => The_Object, Meth => Method_N);
        Subter_List := Method.Get_Sub_List (The_Method);
        if not Method.Sub_List.Is_Empty (Subter_List) then
            Method.Sub_List.Init (Iter => Sub_Iter, L => Subter_List);
            Id_List := Objects_Id.Nil;
            while not Method.Sub_List.Done (Sub_Iter) loop  
                Task_Io.Put_Line
                   ("found " & Utils.Byte_String_To_String
                                  (Byte_Defs.Byte_String
                                      (Parametre_Defs.Identificator
                                          (Method.Sub_List.Value (Sub_Iter)))));
                Id_List :=
                   Objects_Id.Make
                      (Object_Id (Parametre_Defs.Identificator
                                     (Method.Sub_List.Value (Sub_Iter))),
                       Id_List);
                Method.Sub_List.Next (Sub_Iter);
                exit when Method.Sub_List.Done (Sub_Iter);
            end loop;  
        end if;
        return Id_List;




    end Get_All_Subscripter;
end Object_Manager;

E3 Meta Data

    nblk1=1c
    nid=0
    hdr6=38
        [0x00] rec0=1d rec1=00 rec2=01 rec3=060
        [0x01] rec0=18 rec1=00 rec2=08 rec3=05c
        [0x02] rec0=19 rec1=00 rec2=10 rec3=004
        [0x03] rec0=06 rec1=00 rec2=17 rec3=00a
        [0x04] rec0=19 rec1=00 rec2=09 rec3=00e
        [0x05] rec0=18 rec1=00 rec2=0b rec3=028
        [0x06] rec0=17 rec1=00 rec2=0d rec3=08c
        [0x07] rec0=18 rec1=00 rec2=0a rec3=00a
        [0x08] rec0=16 rec1=00 rec2=18 rec3=00a
        [0x09] rec0=12 rec1=00 rec2=07 rec3=030
        [0x0a] rec0=0a rec1=00 rec2=1c rec3=008
        [0x0b] rec0=18 rec1=00 rec2=0c rec3=024
        [0x0c] rec0=01 rec1=00 rec2=1b rec3=062
        [0x0d] rec0=1a rec1=00 rec2=05 rec3=02e
        [0x0e] rec0=18 rec1=00 rec2=0e rec3=056
        [0x0f] rec0=19 rec1=00 rec2=06 rec3=074
        [0x10] rec0=06 rec1=00 rec2=04 rec3=002
        [0x11] rec0=14 rec1=00 rec2=02 rec3=082
        [0x12] rec0=1a rec1=00 rec2=11 rec3=030
        [0x13] rec0=16 rec1=00 rec2=1a rec3=014
        [0x14] rec0=19 rec1=00 rec2=19 rec3=03a
        [0x15] rec0=10 rec1=00 rec2=15 rec3=03c
        [0x16] rec0=18 rec1=00 rec2=16 rec3=022
        [0x17] rec0=05 rec1=00 rec2=14 rec3=024
        [0x18] rec0=14 rec1=00 rec2=03 rec3=056
        [0x19] rec0=0e rec1=00 rec2=13 rec3=01a
        [0x1a] rec0=14 rec1=00 rec2=0f rec3=000
        [0x1b] rec0=06 rec1=00 rec2=12 rec3=000
    tail 0x21763bd7487c59b5cbd2f 0x42a00088462060003