|
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 - download
Length: 29696 (0x7400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Object_Manager, seg_05711b
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
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;
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