-- Copyright (C) 1984 by Xerox Corporation. All rights reserved. <> DIRECTORY VMDefs USING [FullAddress, PageAddress]; HeapFileDefs: DEFINITIONS = BEGIN FirstSegment: PROCEDURE RETURNS [VMDefs.FullAddress]; InsertFirstSegment: PROCEDURE RETURNS [VMDefs.FullAddress]; FreeSegment: PROCEDURE [VMDefs.FullAddress, VMDefs.FullAddress] RETURNS [CARDINAL]; NextPage: PROCEDURE [VMDefs.FullAddress] RETURNS [VMDefs.FullAddress]; NoMorePages: ERROR; -- raised when "nextPage" is called for last page. -- Caught by compactor; an error for readers or writers -- UseNormalPath: ERROR; -- used to notify CommitSinglePage to use the page it has. NewWriterPage: PROCEDURE RETURNS [VMDefs.FullAddress]; NextWriterPage: PROCEDURE [VMDefs.FullAddress] RETURNS [VMDefs.FullAddress]; -- allocates another writer page -- CommitObject: PROCEDURE [start, end: VMDefs.PageAddress]; -- Writer is complete; chain into heap and allow compaction -- ObjectAbandoned: PROCEDURE [start: VMDefs.PageAddress]; -- Object not chained into heap is now free -- ClaimSinglePage: PROCEDURE RETURNS [VMDefs.PageAddress]; -- Claim next page on the written list; used when -- terminating single-page writers; locks out other short -- writers ending until call of CommitedSinglePage CommitedSinglePage: PROCEDURE; -- Single-page writer has committed; page may now be compacted -- semi private items: SegmentIndex: TYPE = CARDINAL; Address: PROCEDURE [of: SegmentIndex] RETURNS [VMDefs.FullAddress]; RecordAllocation: PROCEDURE [seg: SegmentIndex]; AddToFreeList: PROCEDURE [old: SegmentIndex]; NotifyFreeCount: PROC; END.