-- Copyright (C) 1984  by Xerox Corporation. All rights reserved. 
<<Transport Mechanism Filestore - DEFS for heap file management.
 HeapFileDefs.mesa

HGM, 26-Nov-84 17:48:05
Andrew Birrell  10-Jun-81 10:17:39
Hankins	15-Aug-84 15:31:32	(Klamath update)
>>

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.