hyperformula-dc
Version:
HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas
93 lines (92 loc) • 5.54 kB
TypeScript
/**
* @license
* Copyright (c) 2021 Handsoncode. All rights reserved.
*/
import { CellError } from '../Cell';
import { Config } from '../Config';
import { DateTimeHelper } from '../DateTimeHelper';
import { Maybe } from '../Maybe';
import { NumberLiteralHelper } from '../NumberLiteralHelper';
import { InterpreterState } from './InterpreterState';
import { ExtendedNumber, InternalNoErrorScalarValue, InternalScalarValue, InterpreterValue, NumberTypeWithFormat, RawInterpreterValue, RawNoErrorScalarValue, RawScalarValue } from './InterpreterValue';
import { SimpleRangeValue } from './SimpleRangeValue';
export declare type complex = [number, number];
export declare class ArithmeticHelper {
private readonly config;
private readonly dateTimeHelper;
private readonly numberLiteralsHelper;
private readonly collator;
private readonly actualEps;
constructor(config: Config, dateTimeHelper: DateTimeHelper, numberLiteralsHelper: NumberLiteralHelper);
eqMatcherFunction(pattern: string): (arg: RawInterpreterValue) => boolean;
neqMatcherFunction(pattern: string): (arg: RawInterpreterValue) => boolean;
searchString(pattern: string, text: string): number;
requiresRegex(pattern: string): boolean;
private buildRegex;
private normalizeString;
lt: (left: InternalNoErrorScalarValue, right: InternalNoErrorScalarValue) => boolean;
leq: (left: InternalNoErrorScalarValue, right: InternalNoErrorScalarValue) => boolean;
gt: (left: InternalNoErrorScalarValue, right: InternalNoErrorScalarValue) => boolean;
geq: (left: InternalNoErrorScalarValue, right: InternalNoErrorScalarValue) => boolean;
eq: (left: InternalNoErrorScalarValue, right: InternalNoErrorScalarValue) => boolean;
neq: (left: InternalNoErrorScalarValue, right: InternalNoErrorScalarValue) => boolean;
private compare;
floatCmp(leftArg: ExtendedNumber, rightArg: ExtendedNumber): number;
private stringCmp;
pow: (left: ExtendedNumber, right: ExtendedNumber) => number;
addWithEpsilonRaw: (left: number, right: number) => number;
addWithEpsilon: (left: ExtendedNumber, right: ExtendedNumber) => ExtendedNumber;
unaryMinus: (arg: ExtendedNumber) => ExtendedNumber;
unaryPlus: (arg: InternalScalarValue) => InternalScalarValue;
unaryPercent: (arg: ExtendedNumber) => ExtendedNumber;
concat: (left: string, right: string) => string;
nonstrictadd: (left: RawScalarValue, right: RawScalarValue) => number | CellError;
/**
* Subtracts two numbers
*
* Implementation of subtracting which is used in interpreter.
*
* @param left - left operand of subtraction
* @param right - right operand of subtraction
* @param eps - precision of comparison
*/
subtract: (leftArg: ExtendedNumber, rightArg: ExtendedNumber) => ExtendedNumber;
divide: (leftArg: ExtendedNumber, rightArg: ExtendedNumber) => ExtendedNumber | CellError;
multiply: (left: ExtendedNumber, right: ExtendedNumber) => ExtendedNumber;
coerceScalarToNumberOrError(arg: InternalScalarValue): ExtendedNumber | CellError;
coerceToMaybeNumber(arg: InternalScalarValue): Maybe<ExtendedNumber>;
coerceNonDateScalarToMaybeNumber(arg: InternalScalarValue): Maybe<ExtendedNumber>;
coerceComplexExactRanges(args: InterpreterValue[]): complex[] | CellError;
manyToExactComplex: (args: InternalScalarValue[]) => complex[] | CellError;
coerceNumbersExactRanges: (args: InterpreterValue[]) => number[] | CellError;
coerceNumbersCoerceRangesDropNulls: (args: InterpreterValue[]) => number[] | CellError;
private manyToNumbers;
manyToExactNumbers: (args: InternalScalarValue[]) => number[] | CellError;
manyToOnlyNumbersDropNulls: (args: InterpreterValue[]) => number[] | CellError;
manyToCoercedNumbersDropNulls: (args: InternalScalarValue[]) => number[] | CellError;
coerceScalarToComplex(arg: InternalScalarValue): complex | CellError;
private coerceStringToComplex;
private parseComplexToken;
ExtendedNumberFactory(value: number, typeFormat: NumberTypeWithFormat): ExtendedNumber;
}
export declare function coerceComplexToString([re, im]: complex, symb?: string): string | CellError;
export declare function coerceToRange(arg: InterpreterValue): SimpleRangeValue;
export declare function coerceToRangeNumbersOrError(arg: InterpreterValue): SimpleRangeValue | CellError | null;
export declare function coerceBooleanToNumber(arg: boolean): number;
export declare function coerceEmptyToValue(arg: InternalNoErrorScalarValue): RawNoErrorScalarValue;
/**
* Coerce scalar value to boolean if possible, or error if value is an error
*
* @param arg
*/
export declare function coerceScalarToBoolean(arg: InternalScalarValue): boolean | CellError | undefined;
export declare function coerceScalarToString(arg: InternalScalarValue): string | CellError;
export declare function zeroIfEmpty(arg: RawNoErrorScalarValue): RawNoErrorScalarValue;
export declare function numberCmp(leftArg: ExtendedNumber, rightArg: ExtendedNumber): number;
export declare function isNumberOverflow(arg: number): boolean;
export declare function fixNegativeZero(arg: number): number;
export declare function forceNormalizeString(str: string): string;
export declare function coerceRangeToScalar(arg: SimpleRangeValue, state: InterpreterState): Maybe<InternalScalarValue>;
declare type NormalizationForm = 'nfc' | 'nfd' | 'nfkc' | 'nfkd';
export declare function normalizeString(str: string, form: NormalizationForm): string;
export {};