import { Decimal } from 'decimal.js'; import { NumberSystem } from './numberSystem'; import { UnitMeta } from './units'; export declare enum DATATYPE { NUMBER = 0, UNIT = 1, PERCENTAGE = 2 } export declare enum TYPE_RANK { PERCENTAGE = 0, NUMBER = 1, UNIT = 2 } declare abstract class Type { static typeVsStr: { [index in DATATYPE]: string; }; abstract TYPE: DATATYPE; abstract TYPE_RANK: TYPE_RANK; abstract print(): string; abstract toFormat(): string; abstract toNumber(): number; abstract trusty(): boolean; toString(): string; } /** * Represents a type of variable or value */ declare namespace Type { abstract class Numeric extends Type { n: Decimal; lf: boolean; ns: NumberSystem; constructor(value: string | Decimal | number); format(): string; setSystem(numberSys: NumberSystem): Numeric; toNumericString(): string; print(): string; GT(value: Numeric): Numeric; GTE(value: Numeric): Numeric; LT(value: Numeric): Numeric; LTE(value: Numeric): Numeric; EQ(value: Numeric): Numeric; NEQ(value: Numeric): Numeric; Add(value: Numeric): Numeric; Sub(value: Numeric): Numeric; times(value: Numeric): Numeric; divide(value: Numeric): Numeric; power(value: Numeric): Numeric; modulo(value: Numeric): Numeric; toNumber(): number; trusty(): boolean; not(): Numeric; abstract New(value: Decimal): Numeric; abstract isZero(): boolean; abstract isNegative(): boolean; abstract negated(): Numeric; abstract plus(value: Numeric): Numeric; abstract mul(value: Numeric): Numeric; abstract div(value: Numeric): Numeric; abstract pow(value: Numeric): Numeric; abstract mod(value: Numeric): Numeric; abstract gt(value: Numeric): Numeric; abstract gte(value: Numeric): Numeric; abstract lt(value: Numeric): Numeric; abstract lte(value: Numeric): Numeric; abstract eq(value: Numeric): Numeric; abstract nEq(value: Numeric): Numeric; } /** * Basic Number type */ class BNumber extends Numeric { toFormat(): string; static ZERO: BNumber; static New(value: string | Decimal | number): BNumber; TYPE_RANK: TYPE_RANK; TYPE: DATATYPE; constructor(value: string | Decimal | number); gt(value: Numeric): Numeric; gte(value: Numeric): Numeric; lt(value: Numeric): Numeric; lte(value: Numeric): Numeric; eq(value: Numeric): Numeric; nEq(value: Numeric): Numeric; isZero(): boolean; isNegative(): boolean; negated(): Numeric; div(value: Numeric): Numeric; pow(value: Numeric): Numeric; mod(value: Numeric): Numeric; mul(value: Numeric): Numeric; plus(value: Numeric): Numeric; New(value: Decimal): Numeric; } /** * Percentage type */ class Percentage extends Numeric { toFormat(): string; static New(value: string | Decimal | number): Percentage; private static base; TYPE: DATATYPE; TYPE_RANK: TYPE_RANK; constructor(value: string | Decimal | number); gt(value: Numeric): Numeric; gte(value: Numeric): Numeric; lt(value: Numeric): Numeric; lte(value: Numeric): Numeric; eq(value: Numeric): Numeric; nEq(value: Numeric): Numeric; isZero(): boolean; isNegative(): boolean; negated(): Numeric; plus(value: Numeric): Numeric; mul(value: Numeric): Numeric; div(value: Numeric): Numeric; pow(value: Numeric): Numeric; mod(value: Numeric): Numeric; percentageValue(value: Decimal): Decimal; print(): string; New(value: Decimal): Numeric; } /** * Number with unit */ class UnitNumber extends Numeric { toFormat(): string; static New(value: string | Decimal | number, unit: UnitMeta): UnitNumber; static convertToUnit(value: Numeric, unit: UnitMeta): UnitNumber; TYPE: DATATYPE; TYPE_RANK: TYPE_RANK; unit: UnitMeta; constructor(value: string | Decimal | number, unit: UnitMeta); New(value: Decimal): Numeric; isZero(): boolean; isNegative(): boolean; negated(): Numeric; gt(value: Numeric): Numeric; gte(value: Numeric): Numeric; lt(value: Numeric): Numeric; lte(value: Numeric): Numeric; eq(value: Numeric): Numeric; nEq(value: Numeric): Numeric; plus(value: Numeric): Numeric; mul(value: Numeric): Numeric; div(value: Numeric): Numeric; pow(value: Numeric): Numeric; mod(value: Numeric): Numeric; convert(ratio: Decimal, bias: Decimal): Decimal; ratio(): Decimal; bias(): Decimal; print(): string; } class FcalBoolean extends BNumber { toFormat(): string; static TRUE: FcalBoolean; static FALSE: FcalBoolean; private v; constructor(value: string | number | Decimal | boolean); print(): string; not(): BNumber; } } export { Type };