-- File PackTreeOps.Mesa
-- Last modified by Lewis on 30-Dec-80 10:42:04

DIRECTORY
  SymTabDefs USING [HTIndex],
  Tree: FROM "PackTree" USING [Index, Link, Map, NodeName, Scan, Test];

TreeOps: DEFINITIONS =
  BEGIN

 -- tree construction interface

  Initialize, Finalize: PROC;

  PushTree: PROC [v: Tree.Link];
  PopTree: PROC RETURNS [Tree.Link];

  InsertTree: PROC [Tree.Link, CARDINAL]; -- insert v below top CARD. elements
  ExtractTree: PROC [CARDINAL] 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: SymTabDefs.HTIndex];

  SetInfo: PROC [info: UNSPECIFIED];
  SetAttr: PROC [attr: [1..3], value: BOOLEAN];

 -- tree deallocation

  FreeNode: PROC [node: Tree.Index];
  FreeTree: PROC [t: Tree.Link] RETURNS [Tree.Link];

 -- tree attributes

  GetNode: PROC [t: Tree.Link] RETURNS [Tree.Index];
  Shared: PROC [t: Tree.Link] RETURNS [BOOLEAN];
  SetShared: PROC [t: Tree.Link, shared: BOOLEAN];
  TestTree: PROC [t: Tree.Link, name: Tree.NodeName] RETURNS [BOOLEAN];

 -- tree manipulation

  UpdateTree: PROC [root: Tree.Link, map: Tree.Map] RETURNS [v: Tree.Link];

 -- list testing

  ListLength: PROC [t: Tree.Link] RETURNS [CARDINAL];
  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];

  END.