@thermopylae/lib.cache
Version:
73 lines (72 loc) • 1.96 kB
TypeScript
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 };