<> <> <> <> <> <> DIRECTORY DragOpsCross USING [Word], IO USING [STREAM], Rope USING [ROPE]; CacheModels: CEDAR DEFINITIONS = BEGIN <> Word: TYPE = DragOpsCross.Word; wordsPerPage: CARDINAL = 128; logWordsPerPage: CARDINAL = 7; <> Cache: TYPE = REF CacheRec; CacheRec: TYPE = RECORD [ private: REF _ NIL, -- private data to the cache implementation fetch: CacheFetchProc _ NIL, -- this hook allows the user to intercept cache accesses store: CacheStoreProc _ NIL, -- this hook allows the user to intercept cache accesses reset: CacheResetProc _ NIL, -- Resets the given cache to its initial state flush: CacheFlushProc _ NIL, -- Forget everything it knows, but don't effect stats print: CachePrintProc _ NIL, -- Print statistics, and eventually resets them data: REF _ NIL -- private data for clients intercepting fetch & store ]; CacheFetchProc: TYPE = PROC [cache: Cache, addr: Word, fromJump: BOOL _ FALSE]; CacheStoreProc: TYPE = PROC [cache: Cache, addr: Word]; CacheResetProc: TYPE = PROC [cache: Cache]; CacheFlushProc: TYPE = PROC [cache: Cache]; CachePrintProc: TYPE = PROC [cache: Cache, stream: IO.STREAM, name: Rope.ROPE, resetStatistics: BOOL _ TRUE]; <> Fetch: CacheFetchProc; Store: CacheStoreProc; Reset: CacheResetProc; Flush: CacheFlushProc; Print: CachePrintProc; END.