export type StateTS = number;
export declare const INVALID_STATE_TS: number;
export declare enum Quality {
    GOOD = 0,
    UNCERTAIN = 1,
    BAD = 2
}
export declare class State {
    value: any;
    timestamp: StateTS;
    constructor(value?: any, timestamp?: StateTS);
    get quality(): Quality;
    clone(): State;
}
export declare abstract class MessagePublisherPolicy {
    protected _nextTime: StateTS;
    constructor();
    abstract updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    get nextTime(): number;
    rearm(currentTime: StateTS): StateTS;
    referencedTags(): string[];
    setDefaultTagName(tagName: string): void;
    setFieldTagName({ fieldName, tagName }: {
        fieldName: string;
        tagName: string;
    }): void;
    multiTagVersion(tags: string[]): any;
    clone(): any;
}
export declare abstract class MessagePublisher_OperatorPolicy extends MessagePublisherPolicy {
    constructor(operands?: MessagePublisherPolicy[]);
    addOperand(op: MessagePublisherPolicy): void;
    operand(i: number): MessagePublisherPolicy;
    referencedTags(): string[];
    setDefaultTagName(tagName: string): void;
    setFieldTagName({ fieldName, tagName }: {
        fieldName: string;
        tagName: string;
    }): void;
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    multiTagVersion(tags: string[]): MessagePublisher_OperatorPolicy;
    protected clear(): void;
    abstract operatorKeyword(): string;
    toString(): string;
    protected _operands: MessagePublisherPolicy[];
    clone(): MessagePublisher_OperatorPolicy;
}
export declare class MessagePublisher_AndPolicy extends MessagePublisher_OperatorPolicy {
    constructor(operands?: MessagePublisherPolicy[]);
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    rearm(currentTime: StateTS): StateTS;
    operatorKeyword(): string;
}
export declare class MessagePublisher_OrPolicy extends MessagePublisher_OperatorPolicy {
    constructor(operands?: MessagePublisherPolicy[]);
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    rearm(currentTime: StateTS): StateTS;
    operatorKeyword(): string;
}
declare abstract class MessagePublisher_TagBasedPolicy extends MessagePublisherPolicy {
    constructor(tagName?: string);
    get tagName(): string;
    setDefaultTagName(tagName: string): void;
    referencedTags(): string[];
    multiTagVersion(tags: string[]): any;
    abstract defaultMultitagOperator(): MessagePublisher_OperatorPolicy;
    toString(): string;
    protected _tagName: string;
}
export declare class MessagePublisher_QualityPolicy extends MessagePublisher_TagBasedPolicy {
    protected _expectGood: boolean;
    constructor({ tagName, expectGood }: {
        tagName: string;
        expectGood: boolean;
    });
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    toString(): string;
    defaultMultitagOperator(): MessagePublisher_AndPolicy | MessagePublisher_OrPolicy;
}
export declare enum ChangeMask {
    ValueChange = 1,
    QualityChange = 2,
    SourceTimestampChange = 4,
    AnyChange = 5
}
export declare class MessagePublisher_OnChangedPolicy extends MessagePublisher_TagBasedPolicy {
    constructor({ tagName, changeMask, skipFirstNChanges, deadband, isPercent, }: {
        tagName?: string;
        changeMask?: ChangeMask;
        skipFirstNChanges?: number;
        deadband?: number;
        isPercent?: boolean;
    });
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    toString(): string;
    defaultMultitagOperator(): MessagePublisher_OrPolicy;
    protected isOutOfDeadband(v1: any, v2: any): boolean;
    protected _lastState: State;
    protected _changeMask: ChangeMask;
    protected _skipFirstNChanges: number;
    protected _deadband: number;
    protected _isPercent: boolean;
    clone(): any;
}
export declare class MessagePublisher_TimerPolicy extends MessagePublisherPolicy {
    constructor(interval?: number);
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    rearm(currentTime: StateTS): StateTS;
    toString(): string;
    protected _interval: number;
}
export declare class MessagePublisher_AnalogBandPolicy extends MessagePublisher_TagBasedPolicy {
    protected _min: number;
    protected _max: number;
    protected _inside: boolean;
    constructor({ tagName, min, max, inside }: {
        tagName?: string;
        min?: number;
        max?: number;
        inside?: boolean;
    });
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    toString(): string;
    defaultMultitagOperator(): MessagePublisher_AndPolicy;
    protected isInBand(v: any): boolean;
}
export declare class MessagePublisher_OnFieldChangedPolicy extends MessagePublisher_OnChangedPolicy {
    protected _fieldName: string;
    constructor({ fieldName, changeMask, skipFirstNChanges, deadband, isPercent, }: {
        fieldName: string;
        changeMask?: ChangeMask;
        skipFirstNChanges?: number;
        deadband?: number;
        isPercent?: boolean;
    });
    setTagName(tagName: string): void;
    get fieldName(): string;
    setFieldTagName({ fieldName, tagName }: {
        fieldName: string;
        tagName: string;
    }): void;
}
export declare enum LevelMode {
    OnEnter = 1,
    OnExit = 2,
    OnEnterExit = 3
}
export declare class MessagePublisher_OnLevelPolicy<LevelType> extends MessagePublisher_TagBasedPolicy {
    protected _lastState: State;
    protected _skipFirstNChanges: number;
    protected _min: number;
    protected _max: number;
    protected _level: LevelType;
    protected _mode: LevelMode;
    constructor({ tagName, level, levelMode, skipFirstNChanges, deadband, isPercent, }: {
        tagName?: string;
        level?: LevelType;
        levelMode?: LevelMode;
        skipFirstNChanges?: number;
        deadband?: number;
        isPercent?: boolean;
    });
    toString(): string;
    defaultMultitagOperator(): MessagePublisher_OrPolicy;
    updateState({ tagName, newState, currentTime, }: {
        tagName: string;
        newState: State;
        currentTime: StateTS;
    }): StateTS;
    protected isInBand(v: LevelType): boolean;
    clone(): any;
}
export declare class MessagePublisher_OnFieldLevelPolicy<LevelType> extends MessagePublisher_OnLevelPolicy<LevelType> {
    protected _fieldName: string;
    constructor({ fieldName, level, levelMode, skipFirstNChanges, deadband, isPercent, }: {
        fieldName?: string;
        level?: LevelType;
        levelMode?: LevelMode;
        skipFirstNChanges?: number;
        deadband?: number;
        isPercent?: boolean;
    });
    setTagName(tagName: string): void;
    get fieldName(): string;
    setFieldTagName({ fieldName, tagName }: {
        fieldName: string;
        tagName: string;
    }): void;
}
export {};
//# sourceMappingURL=messagepublisherpolicies.d.ts.map