import type { IPoolItem, IPoolItemWithStats } from '../types'; import { AbstractPool } from './AbstractPool'; export class ColdReserve extends AbstractPool implements IPoolItemWithStats { protected useMain = true; constructor(override readonly agents: Map) { super(agents); this.stats.free = Number.POSITIVE_INFINITY; } getNextItem(): TValue { const agents = Array.from(this.agents.values()); if (this.useMain || agents.length === 1) { return agents[0]!; } // use reserve agent return agents[1]!; } /** * Switch from main to reserve or vise versa * @returns true if reserved agent is now in use */ toggleReserve(): boolean { this.useMain = !this.useMain; return !this.useMain; } *[Symbol.iterator](): Generator { yield this.getNextItem(); } }