-- file SakuraTreeOps.Mesa
-- last modified by Satterthwaite, January 13, 1981 9:27 AM
-- last edit by Suzuki, 25-Nov-81 13:13:55
DIRECTORY
PPLeaves: TYPE USING [Leaf, HTIndex, ISEIndex],
Rope: TYPE USING [Ref],
SakuraTree: TYPE;
SakuraTreeOps: DEFINITIONS =
BEGIN OPEN Tree: SakuraTree, PPLeaves;
-- tree construction interface
Initialize, Reset, Finalize: PROC;
Eq: PROC [l,r: Tree.Link] RETURNS [BOOLEAN];
PushTree: PROC [v: Tree.Link];
PopTree: PROC RETURNS [Tree.Link];
InsertTree: PROC [Tree.Link, NAT];
ExtractTree: PROC [NAT] RETURNS [Tree.Link];
MakeNode: PROC [name: Tree.NodeName, count: INTEGER] RETURNS [Tree.Link];
MakeList: PROC [size: INTEGER] RETURNS [Tree.Link];
PushNode: PROC [name: Tree.NodeName, count: INTEGER];
PushList, PushProperList: PROC [size: INTEGER];
PushHash: PROC [hti: Leaf] = INLINE {PushTree[hti]}; -- HTIndex
PushSe: PROC [sei: ISEIndex] = INLINE {PushTree[LOOPHOLE[sei]]}; -- ISEIndex
PushLit: PROC [lti: Leaf] = INLINE {PushTree[lti]}; -- LTIndex
PushStringLit: PROC [sti: Leaf] = INLINE {PushTree[sti]}; -- STIndex
SetInfo: PROC [info: CARDINAL];
SetAttr: PROC [which: Tree.AttrId, value: BOOLEAN];
FreeTree: PROC [t: Tree.Link] RETURNS [Tree.Link] = INLINE {RETURN [Tree.Null]};
PrintName: PROC [name: Tree.NodeName] RETURNS[Rope.Ref];
-- tree attributes
GetHash: PROC [t: Tree.Link] RETURNS [HTIndex];
GetNode: PROC [t: Tree.Link] RETURNS [Tree.Handle];
GetSe: PROC [t: Tree.Link] RETURNS [ISEIndex];
NSons: PROC [t: Tree.Link] RETURNS [NAT];
NthSon: PROC [t: Tree.Link, n: Tree.SonId] RETURNS [Tree.Link];
OpName: PROC [t: Tree.Link] RETURNS [Tree.NodeName];
-- stack manipulation
GetIth: PROC [CARDINAL] RETURNS [Tree.Link];
StackSize: PROC RETURNS [CARDINAL];
-- tree manipulation
Append: PROC [l,r: Tree.Link] RETURNS [Tree.Link];
ScanSons: PROC [root: Tree.Link, action: Tree.Scan];
UpdateLeaves: PROC [root: Tree.Link, map: Tree.Map] RETURNS [v: Tree.Link];
-- list testing
ListLength: PROC [t: Tree.Link] RETURNS [NAT];
ListHead: PROC [t: Tree.Link] RETURNS [Tree.Link];
ListTail: PROC [t: Tree.Link] RETURNS [Tree.Link];
-- list manipulation
ScanList: PROC [root: Tree.Link, action: Tree.Scan];
SearchList: PROC [root: Tree.Link, test: Tree.Test];
ReverseScanList: PROC [root: Tree.Link, action: Tree.Scan];
UpdateList: PROC [root: Tree.Link, map: Tree.Map] RETURNS [Tree.Link];
ReverseUpdateList: PROC [root: Tree.Link, map: Tree.Map] RETURNS [Tree.Link];
ExpandList: PROC [a: Tree.Link] RETURNS [nList: NAT];
-- Pushes elements of the list a onto the stack
-- cross-table tree copying
CopyTree: PROC [root: Tree.Id, map: Tree.Map] RETURNS [v: Tree.Link];
IdentityMap: Tree.Map;
END.