import type { Add, Sub, Mul, Div, Eq, Bounded, BoundedOptions } from "./types"; /** * A saturating (or clamping) integer class implementing {@link Number}, * allowing a value to be constrained to an arbitrary range, and clamping * it to the bounds when arithmetic operations would cause it to overflow or * underflow. * * @example * const level = new Saturating({ min: 1, max: 99 }); * level.add(50); // 51 * level.add(30); // 81 * level.add(30); // 99 * * @throws a {@link RangeError} when range or value is invalid, or when * arguments to arithmetic methods are non-integers. * @throws an {@link Error} when attemping to `div()` by zero. */ export declare class Saturating implements Number, Bounded, Add<[Number], Saturating>, Sub<[Number], Saturating>, Mul<[Number], Saturating>, Div<[Number], Saturating>, Eq<[Number]> { #private; constructor({ max, min }: BoundedOptions, value?: number); static from(bounded: Bounded): Saturating; add(n: N): Saturating; sub(n: N): Saturating; mul(n: N): Saturating; div(n: N): Saturating; eq(other: Number): boolean; get value(): number; get min(): number; get max(): number; valueOf(): number; toFixed(fractionDigits?: number | undefined): string; toExponential(fractionDigits?: number | undefined): string; toPrecision(precision?: number | undefined): string; toString(radix?: number | undefined): string; toLocaleString(locales?: unknown, options?: unknown): string; toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions | undefined): string; [Symbol.toPrimitive](hint: string): string | number; get [Symbol.toStringTag](): string; }