import { DirectionalGraph } from "./utils/DirectionalGraph";
import { FileInfo } from "./FileInfo";
import { Variable, PddlLanguage, ObjectInstance, Parameter } from "./language";
import { PddlSyntaxTree } from "./parser/PddlSyntaxTree";
import { PddlRange, DocumentPositionResolver } from "./DocumentPositionResolver";
import { PddlBracketNode } from "./parser/PddlSyntaxNode";
import { Constraint } from "./constraints";
import { URI } from "vscode-uri";
import { VariableDeclarationsInjection } from "./Compilations";
/**
 * Holds objects belonging to the same type.
 */
export declare class TypeObjects {
    readonly type: string;
    private objects;
    constructor(type: string);
    getObjects(): string[];
    addObject(obj: string): TypeObjects;
    addAllObjects(objects: string[]): TypeObjects;
    hasObjectCaseInsensitive(objectName: string): boolean;
    hasObject(objectName: string): boolean;
    getObjectInstance(objectName: string): ObjectInstance;
}
export declare class TypeObjectMap {
    private typeNameToTypeObjectMap;
    private objectNameToTypeObjectMap;
    private objectNameCaseInsensitiveToTypeObjectMap;
    /**
     * Re-hydrates de-serialized type-object map
     * @param other de-serialized
     */
    static clone(other: unknown): TypeObjectMap;
    toJSON(_key: string): unknown;
    get length(): number;
    merge(other: TypeObjectMap): TypeObjectMap;
    /**
     * Adds object to type.
     * @param type type name (currently case insensitive)
     * @param objectName object name (currently case sensitive)
     */
    add(type: string, objectName: string): TypeObjectMap;
    addAll(type: string, objects: string[]): TypeObjectMap;
    private _upsert;
    private valuesArray;
    /**
     * Returns the `TypeObjects` structure for the lower-cased `type` supplied.
     * @param type case-insensitive type name
     */
    getTypeCaseInsensitive(type: string): TypeObjects | undefined;
    /**
     * Returns the `TypeObjects` structure for a type that has the `objectName` supplied.
     * @param objectName case-sensitive object name
     */
    getTypeOf(objectName: string): TypeObjects | undefined;
    /**
     * Returns the `TypeObjects` structure for a type that has lower-cased `objectName` supplied.
     * @param objectName case-insensitive object name
     */
    getTypeOfCaseInsensitive(objectName: string): TypeObjects | undefined;
}
/**
 * Domain file.
 */
export declare class DomainInfo extends FileInfo {
    readonly syntaxTree: PddlSyntaxTree;
    private predicatesNode;
    private predicates;
    private functionsNode;
    private functions;
    private derived;
    private actions;
    private typeInheritance;
    private typesNode;
    private typeLocations;
    private constantsNode;
    private constants;
    private events?;
    private processes?;
    private constraints;
    constructor(fileUri: URI, version: number, domainName: string, syntaxTree: PddlSyntaxTree, positionResolver: DocumentPositionResolver);
    /**
     * Copy constructor for re-constructing the domain from a serialized form.
     * @param domain de-serialized domain
     */
    static clone(domain: DomainInfo): DomainInfo;
    static cloneAction(action: Action): Action;
    getLanguage(): PddlLanguage;
    getPredicates(): Variable[];
    getPredicatesNode(): PddlBracketNode | undefined;
    setPredicates(predicates: Variable[], predicatesNode: PddlBracketNode | undefined): void;
    injectPredicates(injection: VariableDeclarationsInjection): void;
    getFunctions(): Variable[];
    getFunctionsNode(): PddlBracketNode | undefined;
    setFunctions(functions: Variable[], functionsNode: PddlBracketNode | undefined): void;
    injectFunctions(injection: VariableDeclarationsInjection): void;
    getFunction(liftedVariableName: string): Variable | undefined;
    getLiftedFunction(groundedVariable: Variable): Variable | undefined;
    getDerived(): Variable[];
    setDerived(derived: Variable[]): void;
    setActions(actions: Action[]): void;
    getActions(): Action[];
    getJobs(): DurativeAction[] | undefined;
    getStructures(): Action[];
    getTypeInheritance(): DirectionalGraph;
    getTypesNode(): PddlBracketNode | undefined;
    setTypeInheritance(typeInheritance: DirectionalGraph, typesNode?: PddlBracketNode, positionResolver?: DocumentPositionResolver): void;
    setConstants(constants: TypeObjectMap, constantsNode?: PddlBracketNode): void;
    getConstants(): TypeObjectMap;
    getConstantsNode(): PddlBracketNode | undefined;
    getTypes(): string[];
    getTypesInclObject(): string[];
    isDomain(): boolean;
    getTypesInheritingFrom(type: string): string[];
    getTypesInheritingFromPlusSelf(type: string): string[];
    getEvents(): Action[] | undefined;
    setEvents(events: Action[]): void;
    getProcesses(): Action[] | undefined;
    setProcesses(processes: Action[]): void;
    getConstraints(): Constraint[];
    setConstraints(constraints: Constraint[]): void;
    TYPES_SECTION_START: string;
    getTypeLocation(type: string): PddlRange | undefined;
}
export declare abstract class PddlDomainConstruct {
    readonly name: string | undefined;
    readonly parameters: Parameter[];
    readonly location: PddlRange;
    private documentation;
    constructor(name: string | undefined, parameters: Parameter[], location: PddlRange);
    getLocation(): PddlRange;
    setDocumentation(documentation: string[]): void;
    getDocumentation(): string[];
    getNameOrEmpty(): string;
}
export declare abstract class Action extends PddlDomainConstruct {
    abstract isDurative(): boolean;
}
export declare class InstantAction extends Action {
    readonly preCondition?: PddlBracketNode | undefined;
    readonly effect?: PddlBracketNode | undefined;
    constructor(name: string | undefined, parameters: Parameter[], location: PddlRange, preCondition?: PddlBracketNode | undefined, effect?: PddlBracketNode | undefined);
    isDurative(): boolean;
}
export declare class DurativeAction extends Action {
    readonly actionNode?: PddlBracketNode | undefined;
    readonly parametersNode?: PddlBracketNode | undefined;
    readonly duration?: PddlBracketNode | undefined;
    readonly condition?: PddlBracketNode | undefined;
    readonly effect?: PddlBracketNode | undefined;
    constructor(name: string | undefined, parameters: Parameter[], location: PddlRange, actionNode?: PddlBracketNode | undefined, parametersNode?: PddlBracketNode | undefined, duration?: PddlBracketNode | undefined, condition?: PddlBracketNode | undefined, effect?: PddlBracketNode | undefined);
    isDurative(): boolean;
}
export declare class Job extends DurativeAction {
    constructor(name: string | undefined, parameters: Parameter[], location: PddlRange, actionNode?: PddlBracketNode, parametersNode?: PddlBracketNode, duration?: PddlBracketNode, condition?: PddlBracketNode, effect?: PddlBracketNode);
}
export declare class UnrecognizedStructure extends PddlDomainConstruct {
    constructor(range: PddlRange);
}
