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 };
