-- file Table.Mesa -- last modified by Satterthwaite, July 30, 1980 10:32 AM -- Copyright Xerox Corporation 1979, 1980 DIRECTORY Bases: TYPE USING [ Base, BaseDescriptor, Finger, Index, IPointer, Limit, OrderedIndex, SizeDescriptor]; Table: DEFINITIONS = BEGIN Selector: TYPE = CARDINAL; Base: TYPE = Bases.Base; Finger: TYPE = Bases.Finger; Limit: CARDINAL = Bases.Limit; Index: TYPE = Bases.Index; OrderedIndex: TYPE = Bases.OrderedIndex; IPointer: TYPE = Bases.IPointer; BaseDescriptor: TYPE = Bases.BaseDescriptor; SizeDescriptor: TYPE = Bases.SizeDescriptor; -- allocation from the tables as stacks Allocate: PROC [table: Table.Selector, size: CARDINAL] RETURNS [Table.OrderedIndex]; Bounds: PROC [table: Table.Selector] RETURNS [base: Table.Base, size: CARDINAL]; Top: PROC [table: Table.Selector] RETURNS [Table.OrderedIndex] = INLINE { RETURN[FIRST[Table.OrderedIndex] + Bounds[table].size]}; Trim: PROC [table: Table.Selector, size: CARDINAL]; -- allocation from free list (first table only) chunkType: Table.Selector = FIRST[Table.Selector]; GetChunk: PROC [size: CARDINAL] RETURNS [Table.Index]; FreeChunk: PROC [index: Table.Index, size: CARDINAL]; -- inquiries WordsUsed: PROC RETURNS [CARDINAL]; WordsFree: PROC RETURNS [CARDINAL]; -- notification of repacking Notifier: TYPE = PROC [base: Table.BaseDescriptor]; AddNotify: PROC [proc: Table.Notifier]; DropNotify: PROC [proc: Table.Notifier]; -- initialization and termination Region: TYPE = RECORD [origin: Table.Base, size: CARDINAL]; Create: PROC [region: Table.Region, weights: DESCRIPTOR FOR ARRAY OF CARDINAL]; Destroy: PROC; Overflow: SIGNAL RETURNS [Region]; Failure: ERROR [table: Table.Selector]; END.