-- Transport Mechanism Filestore - private DEFS for heap object directory. --
-- [Juniper]<Grapevine>MS>ObjectDirXDefs.mesa
-- Andrew Birrell 3-Jun-81 12:59:45 --
-- M. D. Schroeder 7-Feb-83 15:28:39
DIRECTORY
ObjectDirDefs USING[ ObjectNumber, ObjectType, noObject ],
VMDefs USING[ FullAddress ];
ObjectDirXDefs: DEFINITIONS = BEGIN
ObjectNumber: TYPE = ObjectDirDefs.ObjectNumber;
gapObjectNumber: ObjectNumber = ObjectDirDefs.noObject;
-- an object number that 'NewObject' will never return --
NewObject: PROCEDURE[ VMDefs.FullAddress, ObjectDirDefs.ObjectType ]
RETURNS[ ObjectNumber ];
-- sets reference count to one --
ObjectBase: PROCEDURE[ ObjectNumber ]
RETURNS[ VMDefs.FullAddress ];
-- Compactor interface --
DOPC: TYPE = LONG CARDINAL;
-- "DeletedObjectPageCount"; see comments in GetObjectState
ObjectState: TYPE = { inUse, unused, duplicate };
GetObjectState: PROCEDURE[ obj: ObjectNumber, where: VMDefs.FullAddress,
dorpc: DOPC -- "r" = read -- ]
RETURNS[ ObjectState ];
-- If object's reference count is non-zero, returns "inUse".
-- If reference count is zero, but base#where, returns "duplicate"
-- Otherwise returns "unused", and marks object as free with dopc=dorpc
-- Object numbers are re-used only if their dopc is <= compactor's
-- most recently reported dofpc.
ReportDofpc: PROCEDURE[ dofpc: DOPC -- "f" = flushed -- ];
-- Compactor has overwritten objects whose dopc is <= dofpc.
MoveObject: PROCEDURE[ ObjectNumber, VMDefs.FullAddress ];
-- Compactor has moved start of object to given address --
ReleaseObject: PROCEDURE[ obj: ObjectNumber];
-- To be used by Write.HeapAbandonWrite when a writer has been abandoned.
-- The reference count for object must be zero.
-- The object cannot be a "temp" object.
END.