RCMapOps.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Rovner On September 19, 1983 9:31 pm
Russ Atkinson (RRA) January 31, 1985 1:11:22 pm PST
Satterthwaite April 23, 1986 11:34:52 am PST
DIRECTORY
RCMap: TYPE USING[Base, Index],
SymbolTable: TYPE USING[Base],
Symbols: TYPE USING[Type, MDIndex];
RCMapTable: TYPE;
RCMT: TYPE = LONG POINTER TO RCMapTable;
OuterProc:
TYPE =
PROC[stb: SymbolTable.Base, mdi: Symbols.MDIndex, inner: PROC[base: SymbolTable.Base]];
MapMap: TYPE = LONG POINTER TO MapMapObj; -- built by Include
MapMapObj: TYPE = RECORD[SEQUENCE length: CARDINAL OF MapMapItem];
MapMapItem: TYPE = RECORD[old, new: RCMap.Index];
OPERATIONs
Create an RCMapTable object
ASSUME ptr was allocated by VM.Allocate
Note that access to this object is not monitored
Create:
PROC[
zone: UNCOUNTED ZONE,
ptr: RCMap.Base, nPages: CARDINAL, outerProc: OuterProc←NIL,
expansionOK: BOOL←FALSE]
RETURNS[RCMT];
Destroy: PROC[rcmt: RCMT] RETURNS[RCMT];
Retrieve info about the RCMap.Base
GetSpan: PROC[rcmt: RCMT] RETURNS[base: RCMap.Base, size: CARDINAL];
Returns the RCMap.Index of the RCMap for the specified type.
Makes an entry if necessary.
Acquire:
PROC[rcmt:
RCMT, stb: SymbolTable.Base, type: Symbols.Type]
RETURNS[RCMap.Index];
Merges the specified RCMap.Base into the table object.
If zone # NIL, allocates and returns a MapMap
Include:
PROC[
rcmt: RCMT, rcmb: RCMap.Base, size: CARDINAL, zone: UNCOUNTED ZONE←NIL]
RETURNS[MapMap];
Does a MapMap lookup: returns the index in the current RCMap.Base that corresponds
to the specified index in the RCMap.Base that Include processed.
FindMapMapEntry:
PROC[mapMap: MapMap, oldIndex: RCMap.Index]
RETURNS[RCMap.Index];
Enumerate:
PROC[
base: RCMap.Base,
limit: CARDINAL,
proc: PROC[RCMap.Index] RETURNS[stop: BOOL]]
RETURNS[stopped: BOOLEAN];
}.