|
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: 6144 (0x1800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body T_Tree, seg_03fdeb
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Unchecked_Deallocation, T_Stack, Text_Io; package body T_Tree is procedure Free is new Unchecked_Deallocation (Tree_Cell, Ttree); procedure Create (A : in out Ttree) is begin A := null; end Create; function Empty (A : Ttree) return Boolean is begin return (A = null); end Empty; function Left (A : Ttree) return Ttree is begin return A.all.Left; end Left; function Right (A : Ttree) return Ttree is begin return A.all.Right; end Right; procedure Build (X : T; Node : in out Ttree; Sad, Sag : Ttree) is begin Node := new Tree_Cell; Affect (Node.all.Element, X); Node.all.Left := Sag; Node.all.Right := Sad; exception when others => raise Error_Ttree_Allocation; end Build; procedure Build (X : T; Node : in out Ttree) is begin Node := new Tree_Cell; Affect (Node.all.Element, X); Node.all.Left := null; Node.all.Right := null; exception when others => raise Error_Ttree_Allocation; end Build; function Get (A : Ttree) return T is begin return A.all.Element; end Get; procedure Put (X : T; A : in out Ttree) is begin Affect (A.all.Element, X); end Put; procedure Create_Iterator (A : Ttree; I : in out Tree_Index) is G : Ttree; begin Stack_Node.Create (I.Ptr); Stack_Node.Push (I.Ptr, A); G := A; while (G.all.Left /= null) loop Stack_Node.Push (I.Ptr, G.all.Left); G := G.all.Left; end loop; end Create_Iterator; function Current_Iterator (I : Tree_Index) return Ttree is begin return Stack_Node.Get (I.Ptr); end Current_Iterator; function End_Iterator (I : Tree_Index) return Boolean is begin return Stack_Node.Empty (I.Ptr); end End_Iterator; procedure Next_Iterator (I : in out Tree_Index) is The_Top, Left_Tree : Ttree; begin if not (Stack_Node.Empty (I.Ptr)) then The_Top := Stack_Node.Get (I.Ptr); Stack_Node.Pop (I.Ptr); if not (Empty (The_Top.all.Right)) then Stack_Node.Push (I.Ptr, The_Top.all.Right); Left_Tree := The_Top.all.Right.all.Left; while not (Empty (Left_Tree)) loop Stack_Node.Push (I.Ptr, Left_Tree); Left_Tree := Left_Tree.all.Left; end loop; end if; end if; end Next_Iterator; procedure Dump (A : Ttree) is Index : Tree_Index; begin Create_Iterator (A, Index); while not (End_Iterator (Index)) loop Print (Get (Current_Iterator (Index))); Next_Iterator (Index); end loop; end Dump; procedure Insert (X : T; A : in out Ttree) is Current : T; begin if Empty (A) then Build (X, A); else Affect (Current, Get (A)); if Compare (Current, X) = Sup then Insert (X, A.all.Left); else Insert (X, A.all.Right); end if; end if; end Insert; procedure Search (X : T; A : Ttree; Found : in out Ttree) is Index : Tree_Index; begin Create_Iterator (A, Index); Found := null; Search_Loop: while not (End_Iterator (Index)) loop if Compare (X, Get (Current_Iterator (Index))) = Equ then Found := Current_Iterator (Index); exit Search_Loop; else Next_Iterator (Index); end if; end loop Search_Loop; end Search; end T_Tree;
nblk1=5 nid=0 hdr6=a [0x00] rec0=2d rec1=00 rec2=01 rec3=032 [0x01] rec0=29 rec1=00 rec2=02 rec3=054 [0x02] rec0=1e rec1=00 rec2=03 rec3=014 [0x03] rec0=22 rec1=00 rec2=04 rec3=024 [0x04] rec0=05 rec1=00 rec2=05 rec3=001 tail 0x21539f8a4860c58958d9e 0x42a00088462060003