-- file IncludeCheckerTable.Mesa
-- last modified by Satterthwaite, July 30, 1980 10:32 AM
-- last modified by Paul Rovner, June 16, 1982 12:54 pm
DIRECTORY
Bases: FROM "LongBases" USING [
Base, BaseDescriptor, Finger, Index, IPointer, Limit, OrderedIndex,
SizeDescriptor];
IncludeCheckerTable: 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: IncludeCheckerTable.Selector, size: CARDINAL]
RETURNS [IncludeCheckerTable.OrderedIndex];
Bounds: PROC [table: IncludeCheckerTable.Selector] RETURNS [base: IncludeCheckerTable.Base, size: CARDINAL];
Top: PROC [table: IncludeCheckerTable.Selector] RETURNS [IncludeCheckerTable.OrderedIndex] = INLINE {
RETURN[FIRST[IncludeCheckerTable.OrderedIndex] + Bounds[table].size]};
Trim: PROC [table: IncludeCheckerTable.Selector, size: CARDINAL];
-- allocation from free list (first table only)
chunkType: IncludeCheckerTable.Selector = FIRST[IncludeCheckerTable.Selector];
GetChunk: PROC [size: CARDINAL] RETURNS [IncludeCheckerTable.Index];
FreeChunk: PROC [index: IncludeCheckerTable.Index, size: CARDINAL];
-- inquiries
WordsUsed: PROC RETURNS [CARDINAL];
WordsFree: PROC RETURNS [CARDINAL];
-- notification of repacking
Notifier: TYPE = PROC [base: IncludeCheckerTable.BaseDescriptor];
AddNotify: PROC [proc: IncludeCheckerTable.Notifier];
DropNotify: PROC [proc: IncludeCheckerTable.Notifier];
-- initialization and termination
Region: TYPE = RECORD [origin: IncludeCheckerTable.Base, size: CARDINAL];
Create: PROC [region: IncludeCheckerTable.Region, weights: DESCRIPTOR FOR ARRAY OF CARDINAL];
Destroy: PROC;
Overflow: SIGNAL RETURNS [Region];
Failure: ERROR [table: IncludeCheckerTable.Selector];
END.