-- Transport Mechanism Filestore - public DEFS for heap object management. --
-- [Juniper]<Grapevine>MS>ObjectDirDefs.mesa
-- Andrew Birrell 24-Feb-81 15:55:22 --
DIRECTORY
VMDefs USING[ PageIndex, PageNumber ];
ObjectDirDefs: DEFINITIONS = BEGIN
ObjectNumber: TYPE = MACHINE DEPENDENT RECORD[
page: PRIVATE VMDefs.PageNumber,
fill: PRIVATE [0..16),
type: PUBLIC ObjectType,
index: PRIVATE VMDefs.PageIndex ];
noObject: ObjectNumber = [page:0, fill:0, type:gap, index:0];
-- A value of "ObjectNumber" which is never be that of a heap object --
ObjectType: TYPE = MACHINE DEPENDENT{
gap(0)--internal--, body(1), SLinput(2), SLpending(3),
SLforward(4), RSobject(5), RSmail(6), temp(7),
RSname(8), MSname(9), testMode(10), TOC(11),
archived(12), delArch(13), spare16(14), spare17(15)
};
-- types of object recorded in heap; limited by field in ObjectNumber
-- (recorded in ObjectHeader on disk) --
UseObject: PROC[ ObjectNumber ];
-- Checks that reference count exceeds zero, then increments reference
-- count --
FreeObject: PROC[ ObjectNumber ];
-- Checks that reference count exceeds zero, then decrements reference
-- count --
-- Procedures used by clients while restarting --
RestartObject: PROC[ ObjectNumber ];
-- Increments reference count. Unlike 'UseObject', will not complain if
-- reference count was zero --
Enumerate: PROC[ type: ObjectType,
proc: PROCEDURE[ObjectNumber]RETURNS[BOOLEAN] ]
RETURNS[ ObjectNumber ];
-- Calls "proc" in turn with the ObjectNumber of each object of the
-- given type currently existing in the heap storage (excluding those
-- which are still being written), until "proc" returns TRUE. This may
-- include objects whose reference count is zero. If "proc" ever
-- returns TRUE, this procedure returns the last object number that was
-- given to "proc", otherwise this procedure returns "noObject". --
END.