import { INumberWindowSetStatOptions, NumberWindow } from '../base/NumberWindow'; import { VirtualTimeObj } from '../../VirtualTimeObj'; export interface IKeyedNumberWindowHash { [key: string]: NumberWindow; } export interface IKeyedNumberWindowOptions { /** * Отличительное имя окна для логирования */ winName: string; /** * Ширина окна: максимальное количество элементов в окне */ width: number; /** * Опциональная функция для записи статистики при добавлении(удалении) событий в ключеванное окно. * Если передана, то подменит собой метод NumberWindow.setStat() */ setStat?: (_setStatOptions: INumberWindowSetStatOptions) => void; /** * Кастомная функция для получения статистики. Она подменит метод окна NumberWindow.getStat() * Если не передана, то метод this.getStatByKey() будет возвращать свойство окна NumberWindow.stat */ getStat?: (numberWindow: NumberWindow, ...args: any[]) => any; /** * Параметры удаления устаревших окон и событий в них. * * Два варианта использования числового окна: * 1) В окнах всегда остается не более width событий * 2) Окна устаревают, когда самое последнее событие в них становится старше maxLiveTimeOfNumberEventsMillis */ garbageCollection?: { /** * Максимальное время жизни последнего события в окне, после которого окно считается устаревшим и удаляется. */ maxLiveTimeOfNumberEventsMillis: number; /** * Интервал цикла очистки устаревших окон. */ intervalMillis: number; /** * Если передан virtualTimeObj, то время устаревания будет рассчитываться * от VirtualTimeObj.virtualTs, иначе - от Date.now() */ virtualTimeObj?: VirtualTimeObj; }; } /** * Набор количественных окон (NumberWindow), идентифицированных ключами. * Ширина всех окон задается единым параметром this.width в момент создания ключеванного окна. * (впрочем это не запрещает изменение ширины отдельно взятого окна в реалтайме) * * Пример использования: для создания множества количественных окон в разрезе инструментов (ключ - instrument.id) * для отслеживания средней цены в пределах (не более чем) заданного количества ценовых событий (н-р, сделок). */ export declare class KeyedNumberWindow { options: IKeyedNumberWindowOptions; hash: IKeyedNumberWindowHash; /** * Ширина окна: максимальное количество элементов в ключеванном окне */ width: number; _collectGarbageTimer: any; constructor(options: IKeyedNumberWindowOptions); setCollectGarbageTimer(collectGarbageIntervalMillis: number): void; add(key: string | number, ts: number, data: T): void; /** * Удаление из окон событий, которые живут более maxLiveTimeOfNumberEventsMillis. * Удаление из хеша всех окон, в которых нет событий */ collectGarbage(): number | undefined; /** * Возвращает окно по ключу. */ getWindowByKey(key: string | number): NumberWindow | undefined; getStatByKey(key: number, ...args: any[]): ST | undefined; setWidth(width: number): void; destroy(): void; } //# sourceMappingURL=KeyedNumberWindow.d.ts.map