/*!
 *   Copyright 2018 Ron Buckton
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
export interface ReadonlyCharSet {
    readonly size: number;
    readonly characterClass: string;
    has(codePoint: number): boolean;
    has(codePointRange: [number, number]): boolean;
    has(codePointSet: ReadonlyCharSet): boolean;
    has(fromCodePoint: number, toCodePoint: number): boolean;
    union(other: ReadonlyCharSet): CharSet;
    intersect(other: ReadonlyCharSet): CharSet;
    except(other: ReadonlyCharSet): CharSet;
    invert(): CharSet;
    equals(other: ReadonlyCharSet): boolean;
    supersetOf(subset: ReadonlyCharSet, proper?: boolean): boolean;
    subsetOf(superset: ReadonlyCharSet, proper?: boolean): boolean;
    toStartLengthArray(): number[];
    codePoints(): IterableIterator<number>;
    codePointRanges(): IterableIterator<[number, number]>;
    [Symbol.iterator](): IterableIterator<number>;
}
export declare class CharSet {
    static readonly MIN_CODE_POINT: number;
    static readonly MAX_CODE_POINT: number;
    static readonly MAX_ASCII_CODE_POINT: number;
    private static _empty;
    private static _any;
    private static _ascii;
    private _tree;
    private _characterClass;
    constructor(iterable?: Iterable<number | [number, number] | ReadonlyCharSet>);
    readonly size: number;
    readonly characterClass: string;
    static empty(): ReadonlyCharSet;
    static any(): ReadonlyCharSet;
    static ascii(): ReadonlyCharSet;
    static range(fromCodePoint: number, toCodePoint: number): CharSet;
    static from(iterable: Iterable<number | [number, number] | ReadonlyCharSet>): CharSet;
    static of(...args: (number | [number, number] | ReadonlyCharSet)[]): CharSet;
    static fromStartLengthArray(array: ReadonlyArray<number>): CharSet;
    has(codePoint: number): boolean;
    has(codePointRange: [number, number]): boolean;
    has(codePointSet: ReadonlyCharSet): boolean;
    has(fromCodePoint: number, toCodePoint: number): boolean;
    add(codePoint: number): this;
    add(codePointRange: [number, number]): this;
    add(codePointSet: ReadonlyCharSet): this;
    add(fromCodePoint: number, toCodePoint: number): this;
    delete(codePoint: number): boolean;
    delete(codePointRange: [number, number]): boolean;
    delete(codePointSet: ReadonlyCharSet): boolean;
    delete(fromCodePoint: number, toCodePoint: number): boolean;
    clear(): void;
    union(other: ReadonlyCharSet): CharSet;
    intersect(other: ReadonlyCharSet): CharSet;
    except(other: ReadonlyCharSet): CharSet;
    invert(): CharSet;
    equals(other: ReadonlyCharSet): boolean;
    supersetOf(subset: ReadonlyCharSet, proper?: boolean): boolean;
    subsetOf(superset: ReadonlyCharSet, proper?: boolean): boolean;
    toStartLengthArray(): number[];
    codePoints(): IterableIterator<number>;
    codePointRanges(): IterableIterator<[number, number]>;
    [Symbol.iterator](): IterableIterator<number>;
    private readonly _debugCodePointRangeCount;
    private _debugVerify();
    private _debugToString(pretty?);
}
declare global  {
    interface ObjectConstructor {
        freeze(object: ReadonlyCharSet): ReadonlyCharSet;
    }
}
