-- file SMTreeOps.mesa -- last modified by Satterthwaite, June 27, 1983 9:47 am -- edit by Schmidt, May 4, 1982 4:10 pm DIRECTORY SMTree: TYPE Tree USING [ AttrId, Ext, Leaf, Link, Handle, Id, Info, Name, NodeName, SonId, Text, null]; SMTreeOps: CEDAR DEFINITIONS~{ OPEN Tree~~SMTree, TreeOps~~SMTreeOps; -- tree manager (with state) TreeManager: TYPE; TM: TYPE~REF TreeManager; Create: PROC[zone: ZONE] RETURNS[TM]; Initialize: PROC[tm: TM]; Reset, Finalize: PROC[tm: TM]; -- tree construction interface (requires state from tree manager) Zone: PROC[tm: TM] RETURNS[ZONE]; PushTree: PROC[tm: TM, v: Tree.Link]; PopTree: PROC[tm: TM] RETURNS[Tree.Link]; InsertTree: PROC[TM, Tree.Link, NAT]; ExtractTree: PROC[TM, NAT] RETURNS[Tree.Link]; MakeNode: PROC[tm: TM, name: Tree.NodeName, count: INTEGER] RETURNS[Tree.Link]; PushNode: PROC[tm: TM, name: Tree.NodeName, count: INTEGER]; PushName: PROC[tm: TM, name: Tree.Name]~INLINE { -- Name tm.PushTree[name]}; PushId: PROC[tm: TM, id: Tree.Id]~INLINE { -- Id tm.PushTree[id]}; PushLit: PROC[tm: TM, lti: Tree.Leaf]~INLINE { -- LTIndex tm.PushTree[lti]}; PushText: PROC[tm: TM, text: Tree.Text]~INLINE { -- Text tm.PushTree[text]}; SetInfo: PROC[tm: TM, info: Tree.Info]; SetAttr: PROC[tm: TM, attr: Tree.AttrId, value: BOOL]; SetExt: PROC[tm: TM, ext: Tree.Ext]; FreeTree: PROC[tm: TM, t: Tree.Link] RETURNS[Tree.Link]~INLINE {RETURN [Tree.null]}; -- tree attributes (no state required) GetName: PROC[t: Tree.Link] RETURNS[Tree.Name]; GetNode: PROC[t: Tree.Link] RETURNS[Tree.Handle]; GetId: PROC[t: Tree.Link] RETURNS[Tree.Id]; NSons: PROC[t: Tree.Link] RETURNS[NAT]; NthSon: PROC[t: Tree.Link, n: Tree.SonId] RETURNS[Tree.Link]; PutNthSon: PROC[t: Tree.Link, n: Tree.SonId, v: Tree.Link]; OpName: PROC[t: Tree.Link] RETURNS[Tree.NodeName]; GetAttr: PROC[t: Tree.Link, attr: Tree.AttrId] RETURNS[BOOL]; PutAttr: PROC[t: Tree.Link, attr: Tree.AttrId, value: BOOL]; GetInfo: PROC[t: Tree.Link] RETURNS[Tree.Info]; PutInfo: PROC[t: Tree.Link, value: Tree.Info]; GetExt: PROC[t: Tree.Link] RETURNS[Tree.Ext]; PutExt: PROC[t: Tree.Link, ext: Tree.Ext]; -- tree scanning Scan: TYPE~PROC[t: Tree.Link]; Test: TYPE~PROC[t: Tree.Link] RETURNS[BOOL]; ScanSons: PROC[root: Tree.Link, action: TreeOps.Scan]; SearchSons: PROC[root: Tree.Link, test: TreeOps.Test]; -- tree mapping (requires tree manager) Map: TYPE~PROC[tm: TM, t: Tree.Link] RETURNS[v: Tree.Link]; UpdateSons: PROC[tm: TM, root: Tree.Link, map: TreeOps.Map]; UpdateLeaves: PROC[tm: TM, root: Tree.Link, map: TreeOps.Map] RETURNS[v: Tree.Link]; -- synchronizing external tree walks StartVisit: PROC[tm: TM] RETURNS[mark: BOOL]; EndVisit: PROC[tm: TM]; -- tree copying CopyTree: PROC[tm: TM, root: Tree.Link, map: TreeOps.Map] RETURNS[v: Tree.Link]; IdentityMap: TreeOps.Map; }.