-- 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.