Alloc: DEFINITIONS = { Selector: TYPE = CARDINAL; Base: TYPE = LONG ORDERED BASE POINTER; Limit: CARDINAL = CARDINAL.LAST; Index: TYPE = Base RELATIVE POINTER [0..Limit); OrderedIndex: TYPE = Base RELATIVE ORDERED POINTER [0..Limit); Handle: TYPE = REF InstanceData; InstanceData: TYPE; Words: PROC[h: Handle, table: Selector, size: CARDINAL] RETURNS[OrderedIndex]; Trim: PROC[h: Handle, table: Selector, size: CARDINAL]; defaultChunkType: Selector = Selector.FIRST; GetChunk: PROC[h: Handle, size: CARDINAL, table: Selector_defaultChunkType] RETURNS[Index]; FreeChunk: PROC[h: Handle, index: Index, size: CARDINAL, table: Selector_defaultChunkType]; Bounds: PROC[h: Handle, table: Selector] RETURNS[base: Base, size: CARDINAL]; Top: PROC[h: Handle, table: Selector] RETURNS[OrderedIndex] = INLINE { RETURN[OrderedIndex.FIRST + h.Bounds[table].size]}; BaseSeq: TYPE = RECORD[SEQUENCE length: NAT OF Base]; Notifier: TYPE = PROC[base: REF BaseSeq]; AddNotify: PROC[h: Handle, proc: Notifier]; DropNotify: PROC[h: Handle, proc: Notifier]; maxForBits: ARRAY [1..16] OF CARDINAL = [ 1b, 3b, 7b, 17b, 37b, 77b, 177b, 377b, 777b, 1777b, 3777b, 7777b, 17777b, 37777b, 77777b, 177777b]; pagesForBits: ARRAY [1..16] OF CARDINAL = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 128, 256]; defaultIndexBits: CARDINAL = 14; defaultTileSize: CARDINAL = 8; TableInfo: TYPE = RECORD[ initialPages: [0..377b], indexBits: [0..16]_defaultIndexBits, variant: SELECT useFullVmem: BOOL FROM FALSE => [initialVMemPages: [0..177b]], TRUE => [], ENDCASE _ TRUE[]]; Create: PROC[ weights: DESCRIPTOR FOR ARRAY OF TableInfo, tileSize: CARDINAL_defaultTileSize] RETURNS[Handle]; Destroy: PROC[Handle]; Reset: PROC[Handle]; Chunkify: PROC[ h: Handle, table: Selector_defaultChunkType, firstSmall: CARDINAL_3, nSmall: CARDINAL_4]; UnChunkify: PROC[h: Handle, table: Selector]; ResetChunk: PROC[h: Handle, table: Selector]; ResetTable: PROC[h: Handle, table: Selector, info: TableInfo]; Failure: ERROR[h: Handle, table: Selector]; Overflow: SIGNAL[h: Handle, table: Selector] RETURNS[extra: CARDINAL]; }. ŽInternalAlloc.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Sweet, 19-Aug-81 12:14:14 Satterthwaite, October 11, 1985 4:57:53 pm PDT Rovner, September 19, 1983 9:36 pm Russ Atkinson (RRA) January 31, 1985 1:05:54 pm PST allocation from the tables as stacks allocation from free list inquiries inquiries and notification of moving subtables initialization and termination Κn˜codešœ™Kšœ Οmœ1™K˜—Kšœžœžœ˜ Kšœžœ˜K˜Kšœ$™$˜KšΟnœžœ#žœžœ˜NKšŸœžœ#žœ˜7K˜—Kšœ™˜Kšœ&žœ˜,K˜KšŸœžœžœ$žœ˜[KšŸ œžœ žœ$˜[K˜—Kšœ ™ ˜KšŸœžœžœžœ˜MšŸœžœžœžœ˜FKšžœžœ˜3K˜——šœ.™.˜Kš œ žœžœžœ žœžœ˜5—KšŸœžœžœžœ ˜)K˜KšŸ œžœ˜+KšŸ œžœ˜,K˜—Kšœ™˜šœ žœ žœžœ˜)K˜BK˜E—šœžœ žœžœ˜+K˜%K˜&K˜—Kšœžœ˜ Kšœžœ˜K˜šœ žœžœ˜K˜Kšœ$˜$šœ žœžœž˜&Kšžœ"˜'Kšžœ˜ Kšžœžœ˜K˜——šŸœžœ˜ Kš œ ž œžœžœžœžœ˜PKšžœ ˜—KšŸœžœ ˜KšŸœžœ ˜K˜šŸœžœ˜K˜,Kšœ žœ žœ˜,—KšŸ œžœ˜-KšŸ œžœ˜-K˜KšŸ œžœ.˜>K˜Kšœ žœ˜+Kšœ žœžœžœ˜FK˜K˜K˜———…—p l