UNPKG

antlr4ts

Version:

ANTLR 4 runtime for JavaScript written in Typescript

97 lines (96 loc) 3.94 kB
/*! * Copyright 2016 The ANTLR Project. All rights reserved. * Licensed under the BSD-3-Clause license. See LICENSE file in the project root for license information. */ import { IntegerList } from "./IntegerList"; import { Interval } from "./Interval"; import { IntSet } from "./IntSet"; import { Vocabulary } from "../Vocabulary"; /** * This class implements the {@link IntSet} backed by a sorted array of * non-overlapping intervals. It is particularly efficient for representing * large collections of numbers, where the majority of elements appear as part * of a sequential range of numbers that are all part of the set. For example, * the set { 1, 2, 3, 4, 7, 8 } may be represented as { [1, 4], [7, 8] }. * * This class is able to represent sets containing any combination of values in * the range {@link Integer#MIN_VALUE} to {@link Integer#MAX_VALUE} * (inclusive). */ export declare class IntervalSet implements IntSet { private static _COMPLETE_CHAR_SET; static get COMPLETE_CHAR_SET(): IntervalSet; private static _EMPTY_SET; static get EMPTY_SET(): IntervalSet; /** The list of sorted, disjoint intervals. */ private _intervals; private readonly; constructor(intervals?: Interval[]); /** * Create a set with all ints within range [a..b] (inclusive). If b is omitted, the set contains the single element * a. */ static of(a: number, b?: number): IntervalSet; clear(): void; /** Add interval; i.e., add all integers from a to b to set. * If b&lt;a, do nothing. * Keep list in sorted order (by left range value). * If overlap, combine ranges. For example, * If this is {1..5, 10..20}, adding 6..7 yields * {1..5, 6..7, 10..20}. Adding 4..8 yields {1..8, 10..20}. */ add(a: number, b?: number): void; protected addRange(addition: Interval): void; /** combine all sets in the array returned the or'd value */ static or(sets: IntervalSet[]): IntervalSet; addAll(set: IntSet): IntervalSet; complementRange(minElement: number, maxElement: number): IntervalSet; /** {@inheritDoc} */ complement(vocabulary: IntSet): IntervalSet; subtract(a: IntSet): IntervalSet; /** * Compute the set difference between two interval sets. The specific * operation is `left - right`. */ static subtract(left: IntervalSet, right: IntervalSet): IntervalSet; or(a: IntSet): IntervalSet; /** {@inheritDoc} */ and(other: IntSet): IntervalSet; /** {@inheritDoc} */ contains(el: number): boolean; /** {@inheritDoc} */ get isNil(): boolean; /** * Returns the maximum value contained in the set if not isNil. * * @return the maximum value contained in the set. * @throws RangeError if set is empty */ get maxElement(): number; /** * Returns the minimum value contained in the set if not isNil. * * @return the minimum value contained in the set. * @throws RangeError if set is empty */ get minElement(): number; /** Return a list of Interval objects. */ get intervals(): Interval[]; hashCode(): number; /** Are two IntervalSets equal? Because all intervals are sorted * and disjoint, equals is a simple linear walk over both lists * to make sure they are the same. Interval.equals() is used * by the List.equals() method to check the ranges. */ equals(o: any): boolean; toString(elemAreChar?: boolean): string; toStringVocabulary(vocabulary: Vocabulary): string; protected elementName(vocabulary: Vocabulary, a: number): string; get size(): number; toIntegerList(): IntegerList; toSet(): Set<number>; toArray(): number[]; remove(el: number): void; get isReadonly(): boolean; setReadonly(readonly: boolean): void; }