import { ObjectMapping } from "./objectMapping";
import { Reference } from "../reference";
import { MappingModel } from "./mappingModel";
import { InternalSession } from "../session";
import { ResultCallback } from "../core/callback";
import { ReadContext } from "./readContext";
import { WriteContext } from "./writeContext";
export declare class ClassMapping extends ObjectMapping {
    private _baseClass;
    private _subclasses;
    private _discriminatorMap;
    private _registry;
    inheritanceRoot: ClassMapping;
    name: string;
    discriminatorField: string;
    classConstructor: Function;
    constructor(baseClass?: ClassMapping);
    private _discriminatorValue;
    readonly discriminatorValue: string;
    setDiscriminatorValue(value: string): void;
    setQueryDocumentDiscriminator(obj: any): void;
    setDocumentDiscriminator(obj: any): void;
    getDocumentDiscriminator(obj: any): string;
    private _getDescendantDiscriminators(discriminators);
    readonly hasSubClasses: boolean;
    readonly hasBaseClass: boolean;
    private _addSubClass(subclass);
    private _addDiscriminatorMapping(value, mapping);
    private _ensureRegistry();
    read(context: ReadContext, value: any): any;
    getMapping(context: ReadContext, document: any): ClassMapping;
    private _getMappingForDocument(document);
    protected readClass(context: ReadContext, value: any): any;
    write(context: WriteContext, value: any): any;
    protected writeClass(context: WriteContext, value: any, mappedConstructor: boolean): any;
    areEqual(documentValue1: any, documentValue2: any): boolean;
    private _areEqual(documentValue1, documentValue2);
    walk(session: InternalSession, value: any, flags: MappingModel.PropertyFlags, entities: any[], embedded: any[], references: Reference[]): void;
    private _walk(session, value, flags, entities, embedded, references);
    fetch(session: InternalSession, parentEntity: any, value: any, path: string[], depth: number, callback: ResultCallback<any>): void;
    private _fetch(session, parentEntity, value, path, depth, callback);
}
