DIRECTORY Rope, SymTab; IPSimpleTree: CEDAR DEFINITIONS = BEGIN Ref: TYPE = REF Rep; Rep: TYPE = RECORD[ tab: SymTab.Ref, initialized: BOOL _ FALSE, root: Rope.ROPE _ NIL ]; Nodes: TYPE = LIST OF Node; Node: TYPE = REF NodeRep; NodeRep: TYPE = RECORD[ name: Rope.ROPE, areaEstimate: INT _ 0, any: REF _ NIL, parent: Rope.ROPE _ NIL, children: LIST OF Rope.ROPE _ NIL]; Create: PROC [] RETURNS [Ref]; AddNode: PROC[st: Ref, ndName, parent: Rope.ROPE, children: LIST OF Rope.ROPE, areaEst: INT _ 0, any: REF _ NIL]; RemoveNode: PROC[st: Ref, ndName: Rope.ROPE] RETURNS [done: BOOL]; GetRoot: PROC[st: Ref] RETURNS [Node]; GetLeaves: PROC[st: Ref] RETURNS [count: NAT, leaves: Nodes]; GetNode: PROC[st: Ref, nodeName: Rope.ROPE, raiseError: BOOL _ TRUE] RETURNS [Node]; GetChildren: PROC[st: Ref, node: Node] RETURNS [Nodes]; GetParent: PROC[st: Ref, node: Node] RETURNS [Node]; END.  --File: IPSimpleTree.mesa Last Edited by: CSChow, February 2, 1985 2:51:50 am PST --Intro: This is an extremely simple minded implementation of tree. -- Nodes are records with (i) own name, (ii) areaEstimate, (iii) name of parent, -- (iv) names of children. -- The 'any' field is used to hold a number of things, look at the Impl. --(A) Tree Constructors: -- (B) Tree Queries: -- IF (nodeName is not a namraise e of node) AND raiseError -- THEN raise ! IP.Error[missingRegistration, " is not a node"] Κ*˜J™J™7J™codešΟk ˜ K˜Kšœ˜—K˜šœœ œ˜'K™CK™QK™K™H—˜Kšœœœ˜šœœœ˜Kšœ˜Kšœ œœ˜Kšœ œ˜Kšœ˜—K˜Kšœœœœ˜Kšœœœ ˜šœ œœ˜Kšœ œ˜Kšœœ˜Kšœœœ˜Kšœ œœ˜Kš œ œœœœ˜#—K˜KšΟnœœœ˜K˜K™K™Kšžœœœ œœœ œ œœ˜qK˜Kš ž œœœœœ˜BK˜K˜K™Kšžœœ œ˜&K˜Kšž œœ œ œ˜=K˜š žœœœœœœ˜TKšœœ6™