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