UNPKG

@thermopylae/lib.cache

Version:
73 lines (72 loc) 1.96 kB
import { CacheReplacementPolicy, Deleter, EntryValidity } from '../../contracts/cache-replacement-policy'; import { CacheEntry } from '../../contracts/commons'; import { DoublyLinkedListNode } from '../../data-structures/list/doubly-linked'; /** * @private */ declare const SEGMENT_TYPE_SYM: unique symbol; /** * @private */ declare const enum SegmentType { /** * Recent Cache Entries */ T1 = 0, /** * Frequently-Used Entries */ T2 = 1 } /** * @private */ interface EvictableCacheEntry<Key, Value> extends CacheEntry<Key, Value>, DoublyLinkedListNode<EvictableCacheEntry<Key, Value>> { [SEGMENT_TYPE_SYM]: SegmentType; } /** * [Adaptive Replacement Cache](https://en.wikipedia.org/wiki/Adaptive_replacement_cache "Adaptive Replacement Cache (ARC)") eviction policy. * * @template Key Type of the key. * @template Value Type of the value. * @template ArgumentsBundle Type of the arguments bundle. */ declare class ArcEvictionPolicy<Key, Value, ArgumentsBundle = unknown> implements CacheReplacementPolicy<Key, Value, ArgumentsBundle> { private readonly segments; private deleteFromCache; /** * @param cacheMaxCapacity {@link Cache} maximum capacity. */ constructor(cacheMaxCapacity: number); /** * @inheritDoc */ onHit(entry: EvictableCacheEntry<Key, Value>): EntryValidity; /** * @inheritDoc */ onMiss(key: Key): void; /** * @inheritDoc */ onSet(entry: EvictableCacheEntry<Key, Value>): void; /** * @inheritDoc */ onUpdate(): void; /** * @inheritDoc */ onDelete(entry: EvictableCacheEntry<Key, Value>): void; /** * @inheritDoc */ onClear(): void; /** * @inheritDoc */ setDeleter(deleter: Deleter<Key, Value>): void; private insertInT1; private insertInT2; } export { ArcEvictionPolicy, EvictableCacheEntry, SegmentType, SEGMENT_TYPE_SYM };