|
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: 10240 (0x2800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Hierarchy_Generic, seg_0043ec
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
package body Hierarchy_Generic is function Location (Of_This_Element : Element; In_This_Hierarchy : Hier) return Hier_Ptr is Search_Ptr : Hier_Ptr := In_This_Hierarchy.First; begin while Search_Ptr /= null loop if Are_Equal (Search_Ptr.Contents, Of_This_Element) then return Search_Ptr; end if; Search_Ptr := Search_Ptr.Next; end loop; return null; end Location; function Create return Hier is begin return (True, null, null); end Create; procedure Add (This_Element : Element; To_This_Hierarchy : in out Hier; Element_Location : out Hier_Ptr) is New_Node : Hier_Ptr; The_Location : Hier_Ptr := Location (Of_This_Element => This_Element, In_This_Hierarchy => To_This_Hierarchy); begin if The_Location = null then New_Node := new Hier_Node'(Contents => This_Element, Is_Marked => False, Parents => Ptr_Lists.Create, Children => Ptr_Lists.Create, Next => null); if To_This_Hierarchy.First = null then -- empty list To_This_Hierarchy.First := New_Node; To_This_Hierarchy.Last := New_Node; else To_This_Hierarchy.Last.Next := New_Node; To_This_Hierarchy.Last := New_Node; end if; Element_Location := New_Node; else Element_Location := The_Location; end if; end Add; procedure Add (This_Parent : Element; And_This_Child : Element; To_This_Hierarchy : in out Hier) is Parent_Ptr, Child_Ptr : Hier_Ptr; begin if not To_This_Hierarchy.Initialized then raise Hierarchy_Not_Initialized; end if; Add (This_Parent, To_This_Hierarchy, Parent_Ptr); Add (And_This_Child, To_This_Hierarchy, Child_Ptr); if not Ptr_Lists.Exists (In_This_List => Parent_Ptr.Children, This_Element => Child_Ptr) then Ptr_Lists.Add (To_List => Parent_Ptr.Children, This_Element => Child_Ptr); Ptr_Lists.Add (To_List => Child_Ptr.Parents, This_Element => Parent_Ptr); end if; end Add; procedure Mark_Element (This_Element : Element; In_This_Hierarchy : in out Hier) is The_Element : Hier_Ptr; begin Add (This_Element, In_This_Hierarchy, The_Element); The_Element.Is_Marked := True; end Mark_Element; function Element_Is_Marked (This_Element : Element; In_This_Hierarchy : Hier) return Boolean is The_Element : Hier_Ptr := Location (Of_This_Element => This_Element, In_This_Hierarchy => In_This_Hierarchy); begin if The_Element /= null then return The_Element.Is_Marked; else return False; end if; end Element_Is_Marked; function Map_From (This_Element : Element; In_This_Hierarchy : Hier) return Map is Num_Parents : Natural := 0; Num_Children : Natural := 0; Record_Size : Natural := 0; Element_Ptr : Hier_Ptr := Location (Of_This_Element => This_Element, In_This_Hierarchy => In_This_Hierarchy); begin Ptr_Lists.Reset (Element_Ptr.Parents); while not Ptr_Lists.Done (Element_Ptr.Parents) loop Num_Parents := Num_Parents + 1; Ptr_Lists.Next (Element_Ptr.Parents); end loop; Ptr_Lists.Reset (Element_Ptr.Children); while not Ptr_Lists.Done (Element_Ptr.Children) loop Num_Children := Num_Children + 1; Ptr_Lists.Next (Element_Ptr.Children); end loop; if Num_Children > Num_Parents then Record_Size := Num_Children; else Record_Size := Num_Parents; end if; declare The_Map : Map (Record_Size); begin The_Map.Current := Element_Ptr.Contents; -- -- set the parents -- The_Map.Num_Parents := Num_Parents; Ptr_Lists.Reset (Element_Ptr.Parents); for This_Parent in 1 .. Num_Parents loop The_Map.Parents (This_Parent) := Ptr_Lists.Current (Element_Ptr.Parents).Contents; Ptr_Lists.Next (Element_Ptr.Parents); end loop; -- -- set the children -- The_Map.Num_Children := Num_Children; Ptr_Lists.Reset (Element_Ptr.Children); for This_Child in 1 .. Num_Children loop The_Map.Children (This_Child) := Ptr_Lists.Current (Element_Ptr.Children).Contents; Ptr_Lists.Next (Element_Ptr.Children); end loop; return The_Map; end; end Map_From; end Hierarchy_Generic;
nblk1=9 nid=0 hdr6=12 [0x00] rec0=1f rec1=00 rec2=01 rec3=06c [0x01] rec0=00 rec1=00 rec2=09 rec3=008 [0x02] rec0=18 rec1=00 rec2=02 rec3=016 [0x03] rec0=00 rec1=00 rec2=08 rec3=00c [0x04] rec0=17 rec1=00 rec2=03 rec3=026 [0x05] rec0=1c rec1=00 rec2=04 rec3=004 [0x06] rec0=00 rec1=00 rec2=07 rec3=00e [0x07] rec0=1c rec1=00 rec2=05 rec3=036 [0x08] rec0=14 rec1=00 rec2=06 rec3=000 tail 0x2150031ae815c63517382 0x42a00088462061e03