import { N } from './baseType'; import { SingleChain, IDoublyChain } from './chain'; import { DoublyChainElement } from './chain'; interface CacheNode { flushTime: N; key: K; value: V; } interface CacheOption { size: N; policy: 'lru' | 'fifo'; expiration: N; period: N; } interface Cache { get: (k: K) => V | undefined; put: (k: K, v: V) => void; _createNode: (k: K, v: V, f: N) => CacheNode; _flush: () => void; _setIntervalFlush: () => void; } interface FifoNode { key: K; value: V; } interface Fifo { capacity: N; chain: SingleChain>; _createNode: (k: K, v: V) => FifoNode; get: (k: K) => V | undefined; put: (k: K, v: V) => N; size: () => N; keys: () => K[]; values: () => V[]; } interface LfuNode { key: K; value: V; count: N; } interface Lfu { capacity: N; chain: IDoublyChain>; _createNode: (k: K, v: V, c: N) => LfuNode; _get: (k: K) => DoublyChainElement> | undefined; get: (k: K) => V | undefined; put: (k: K, v: V) => N; size: () => N; keys: () => K[]; values: () => V[]; } export { Cache, CacheOption, CacheNode, FifoNode, Fifo, LfuNode, Lfu };