import { RootContext, Target } from "@syntest/analysis";
import { ControlFlowProgram } from "@syntest/cfg";
import { Encoding } from "./Encoding";
import { ObjectiveFunction } from "./objective/ObjectiveFunction";
/**
 * Subject of the search process.
 *
 * @author Mitchell Olsthoorn
 */
export declare abstract class SearchSubject<T extends Encoding> {
    /**
     * Subject Target
     * @protected
     */
    protected readonly _target: Target;
    /**
     * The root context.
     * @protected
     */
    protected readonly _rootContext: RootContext<unknown>;
    /**
     * Mapping of objectives to adjacent objectives
     * @protected
     */
    protected _objectives: Map<ObjectiveFunction<T>, ObjectiveFunction<T>[]>;
    /**
     * Constructor.
     *
     * @param target Target of the subject
     * @param rootContext RootContext of the subject
     * @protected
     */
    protected constructor(target: Target, rootContext: RootContext<unknown>);
    /**
     * Extract objectives from the subject based on the targets.
     * @protected
     */
    protected abstract _extractObjectives(): void;
    /**
     * Retrieve objectives.
     */
    getObjectives(): ObjectiveFunction<T>[];
    /**
     * Retrieve child objectives.
     *
     * @param objective The objective to get the child objectives of
     */
    getChildObjectives(objective: ObjectiveFunction<T>): ObjectiveFunction<T>[];
    get name(): string;
    get cfg(): ControlFlowProgram;
    get path(): string;
}
//# sourceMappingURL=SearchSubject.d.ts.map