import { CdmAttribute, CdmAttributeContext, CdmCorpusContext, CdmObject, CdmObjectDefinitionBase, cdmObjectType, cdmOperationType, ProjectionAttributeState, ProjectionAttributeStateSet, ProjectionContext, ResolvedAttribute, resolveOptions, VisitCallback } from '../../internal';
/**
 * Base class for all operations
 */
export declare abstract class CdmOperationBase extends CdmObjectDefinitionBase {
    /**
     * The index of an operation
     * In a projection's operation collection, 2 same type of operation may cause duplicate attribute context
     * To avoid that we add an index
     * @internal
     */
    index: number;
    /***
     * Property of an operation that holds the condition expression string
     */
    condition?: string;
    /**
     * Property of an operation that defines if the operation receives the input from previous operation or from source entity
     */
    sourceInput?: boolean;
    type: cdmOperationType;
    constructor(ctx: CdmCorpusContext);
    /**
     * @internal
     */
    copyProj(resOpt: resolveOptions, copy: CdmOperationBase): CdmOperationBase;
    /**
     * @inheritdoc
     */
    abstract copy(resOpt?: resolveOptions, host?: CdmObject): CdmObject;
    /**
     * @inheritdoc
     */
    abstract getName(): string;
    /**
     * @inheritdoc
     */
    abstract getObjectType(): cdmObjectType;
    /**
     * @inheritdoc
     */
    isDerivedFrom(base: string, resOpt?: resolveOptions): boolean;
    /**
     * @inheritdoc
     */
    abstract validate(): boolean;
    /**
     * @inheritdoc
     */
    abstract visit(pathFrom: string, preChildren: VisitCallback, postChildren: VisitCallback): boolean;
    /**
     * A function to cumulate the projection attribute states
     * @internal
     */
    abstract appendProjectionAttributeState(projCtx: ProjectionContext, projAttrStateSet: ProjectionAttributeStateSet, attrCtx: CdmAttributeContext): ProjectionAttributeStateSet;
    /**
     * Projections require a new resolved attribute to be created multiple times
     * This function allows us to create new resolved attributes based on a input attribute
     * @internal
     */
    static createNewResolvedAttribute(projCtx: ProjectionContext, attrCtxUnder: CdmAttributeContext, target_attr_or_resolved_attr: CdmAttribute | ResolvedAttribute, overrideDefaultName?: string, addedSimpleRefTraits?: string[]): ResolvedAttribute;
    /**
     * Replace the wildcard character. {a/A} will be replaced with the current attribute's original name.
     * {m/M} will be replaced with the attribute name of the projection owner.
     * {mo/Mo} will be replaced with the current attribute's resolved name.
     * {o} will be replaced with the index of the attribute after an array expansion.
     * @internal
     */
    static replaceWildcardCharacters(format: string, projectionOwnerName: string, currentPAS: ProjectionAttributeState): string;
}
