<> <> <> <<>> DIRECTORY Core, CoreTypeCache; CoreTypeCacheImpl: CEDAR PROGRAM IMPORTS EXPORTS CoreTypeCache = BEGIN OPEN Core, CoreTypeCache; ConcreteTypeCache: TYPE = REF TypeCacheRec; TypeCacheRec: PUBLIC TYPE = RECORD[ make: MakeProc, compare: CompareProc, values: REF]; Narrow: PUBLIC PROC [asAny: REF ANY] RETURNS [typeCache: ConcreteTypeCache] = {typeCache _ NARROW[asAny]}; CreateCache: PUBLIC PROC [make: MakeProc, compare: CompareProc] RETURNS [typeCache: ConcreteTypeCache] = { typeCache _ NEW[TypeCacheRec _ [ make: make, compare: compare, values: NIL]]; }; Ensure: PUBLIC PROC [design: Design, typeCache: ConcreteTypeCache, args: REF ANY] RETURNS [cellType: CellType] = { cellType _ NIL; IF cellType=NIL THEN cellType _ typeCache.make[design: design, args: args]; }; END.