import { KeyValue } from '../core/comparison';
import { IEvaluatable, IJson, IJsonDump, IReport } from '../core/contracts';
import { Reporter } from '../core/util';
import { FeatureThing, IDistanceOpts, IOlOpts } from './contracts';
import { PolygraphOl } from './polygraph';
import { WAFeature } from './feature';
export declare abstract class OlBase extends KeyValue implements IEvaluatable, IJson {
    static alias: string;
    protected _feature: WAFeature;
    protected _opts: IOlOpts;
    protected _reporter: Reporter;
    constructor(value: FeatureThing, opts: IOlOpts);
    get feature(): WAFeature;
    get opts(): IOlOpts;
    getAlias(): string;
    getReport(): IReport;
    resetReport(): void;
    asJson(): IJsonDump;
    evaluate<FeatureThing>(obj: FeatureThing): boolean;
}
export interface IOlOperators {
    intersects(value: FeatureThing): PolygraphOl;
    disjoint(value: FeatureThing): PolygraphOl;
    contains(value: FeatureThing): PolygraphOl;
    within(value: FeatureThing): PolygraphOl;
    distanceWithin(value: FeatureThing, distance: number): PolygraphOl;
    distanceBeyond(value: FeatureThing, distance: number): PolygraphOl;
}
export declare class OlIntersects extends OlBase {
    static alias: string;
}
export declare class OlDisjoint extends OlBase {
    static alias: string;
}
export declare class OlContains extends OlBase {
    static alias: string;
}
export declare class OlWithin extends OlBase {
    static alias: string;
}
export declare abstract class OlDistanceBase extends OlBase {
    get opts(): IDistanceOpts;
}
export declare class OlDistanceWithin extends OlDistanceBase {
    static alias: string;
}
export declare class OlDistanceBeyond extends OlDistanceBase {
    static alias: string;
}
