import { Pattern } from "./pattern"; import { Type } from "./type"; import { BasicBlock } from "./expression"; declare type Metadata = number; declare type uint32 = number; export declare enum PredicateTag { AND = 0, OR = 1, NOT = 2, RELATION = 3, SAMPLE_RELATION = 4, SAMPLE_TYPE = 5, CONSTRAIN = 6, LET = 7, TYPE = 8, ALWAYS = 9 } export declare type Predicate = PAnd | POr | PNot | PRelation | PSampleRelation | PSampleType | PConstrained | PLet | PType | PAlways; export declare abstract class PredicateBase { } export declare class PAnd extends PredicateBase { readonly meta: Metadata; readonly left: Predicate; readonly right: Predicate; readonly tag = PredicateTag.AND; constructor(meta: Metadata, left: Predicate, right: Predicate); } export declare class POr extends PredicateBase { readonly meta: Metadata; readonly left: Predicate; readonly right: Predicate; readonly tag = PredicateTag.OR; constructor(meta: Metadata, left: Predicate, right: Predicate); } export declare class PNot extends PredicateBase { readonly meta: Metadata; readonly pred: Predicate; readonly tag = PredicateTag.NOT; constructor(meta: Metadata, pred: Predicate); } export declare class PRelation extends PredicateBase { readonly meta: Metadata; readonly relation: string; readonly patterns: Pattern[]; readonly tag = PredicateTag.RELATION; constructor(meta: Metadata, relation: string, patterns: Pattern[]); } export declare class PSampleRelation extends PredicateBase { readonly meta: Metadata; readonly size: uint32; readonly relation: string; readonly patterns: Pattern[]; readonly tag = PredicateTag.SAMPLE_RELATION; constructor(meta: Metadata, size: uint32, relation: string, patterns: Pattern[]); } export declare class PSampleType extends PredicateBase { readonly meta: Metadata; readonly size: uint32; readonly name: string; readonly type: Type; readonly tag = PredicateTag.SAMPLE_TYPE; constructor(meta: Metadata, size: uint32, name: string, type: Type); } export declare class PConstrained extends PredicateBase { readonly meta: Metadata; readonly predicate: Predicate; readonly constraint: BasicBlock; readonly tag = PredicateTag.CONSTRAIN; constructor(meta: Metadata, predicate: Predicate, constraint: BasicBlock); } export declare class PLet extends PredicateBase { readonly meta: Metadata; readonly name: string; readonly value: BasicBlock; readonly tag = PredicateTag.LET; constructor(meta: Metadata, name: string, value: BasicBlock); } export declare class PType extends PredicateBase { readonly meta: Metadata; readonly name: string; readonly type: Type; readonly tag = PredicateTag.TYPE; constructor(meta: Metadata, name: string, type: Type); } export declare class PAlways extends PredicateBase { readonly meta: Metadata; readonly tag = PredicateTag.ALWAYS; constructor(meta: Metadata); } export {};