<> <> <> <<>> FunctionCache: CEDAR DEFINITIONS ~ BEGIN <> <> <<>> Cache: TYPE ~ REF CacheRep; CacheInfo: TYPE ~ RECORD [nEntries: INT, maxEntries: INT, totalSize: INT, maxTotalSize: INT]; Create: PROC [maxEntries: INT _ 10, maxTotalSize: INT _ INT.LAST] RETURNS [Cache]; ClientID: TYPE ~ REF; -- to allow otherwise independent clients to share cache space. Domain: TYPE ~ REF; Range: TYPE ~ REF; Eval: PROC [x: Cache, F: FuncProc, arg: Domain, match: Match, clientID: ClientID _ NIL] RETURNS [Range]; <> FuncProc: TYPE ~ PROC [Domain] RETURNS [value: Range, size: INT]; Match: TYPE ~ {refs, case, text} _ refs; <> <> <> Insert: PROC [x: Cache, argument: Domain, value: Range, size: INT, clientID: ClientID _ NIL]; CompareProc: TYPE ~ PROC [argument: Domain] RETURNS [good: BOOL]; Any: CompareProc; -- returns TRUE Equal: PROC [a, b: Domain, match: Match] RETURNS [BOOL]; <> Lookup: PROC [x: Cache, compare: CompareProc, clientID: ClientID _ NIL] RETURNS [value: Range, ok: BOOL]; <> CacheEntry: TYPE ~ RECORD [clientID: ClientID, argument: Domain, value: Range, size: INT]; Obtain: PROC [x: Cache, compare: CompareProc, limit: INT _ 1, clientID: ClientID _ NIL] RETURNS [LIST OF CacheEntry]; <> <<>> Release: PROC [x: Cache, list: LIST OF CacheEntry]; <> GetInfo: PROC [x: Cache] RETURNS [CacheInfo]; GetList: PROC [x: Cache] RETURNS [LIST OF CacheEntry]; <> SetLimits: PROC [x: Cache, maxEntries: INT _ 10, maxTotalSize: INT _ INT.LAST]; SetValueSize: PROC [x: Cache, value: Range, size: INT]; GlobalCache: PROC RETURNS [Cache]; <> CacheRep: TYPE ~ PRIVATE MONITORED RECORD [ nEntries: INT, maxEntries: INT, totalSize: INT, maxTotalSize: INT, entryList: LIST OF CacheEntry ]; END.