-- PackHeapImpl.Mesa Last edited by Lewis on 1-Jan-81 12:17:57 DIRECTORY Heap USING [Create, Delete, FreeNode, MakeNode], PackHeap, Segments USING [Address], Strings USING [String]; PackHeapImpl: PROGRAM IMPORTS Heap EXPORTS PackHeap = BEGIN privateHeap: UNCOUNTED ZONE ← NIL; GetSpace: PUBLIC PROC [nWords: CARDINAL] RETURNS [p: Segments.Address] = {RETURN[Heap.MakeNode[privateHeap, nWords]]}; FreeSpace: PUBLIC PROC [p: Segments.Address] = {Heap.FreeNode[privateHeap, p]}; GetString: PUBLIC PROC [nChars: CARDINAL] RETURNS [s: Strings.String] = {RETURN[privateHeap.NEW[StringBody[nChars]]]}; FreeString: PUBLIC PROC [s: Strings.String] = BEGIN p: Strings.String ← s; privateHeap.FREE[@p]; END; Initialize: PUBLIC PROC = BEGIN IF privateHeap # NIL THEN Finalize[]; privateHeap ← Heap.Create[initial: 10, increment: 2]; END; Finalize: PUBLIC PROC = {Heap.Delete[privateHeap]; privateHeap ← NIL}; END.