| 151 | }; |
| 152 | |
| 153 | struct AndPredicate : IPredicate, ReferenceCounted<AndPredicate>, FastAllocated<AndPredicate> { |
| 154 | void addref() override { ReferenceCounted<AndPredicate>::addref(); } |
| 155 | void delref() override { ReferenceCounted<AndPredicate>::delref(); } |
| 156 | |
| 157 | TypeCode getTypeCode() const override { return TypeCode::AND; } |
| 158 | |
| 159 | std::vector<Reference<IPredicate>> terms; |
| 160 | |
| 161 | explicit AndPredicate(std::vector<Reference<IPredicate>> const& terms) : terms(terms) {} |
| 162 | AndPredicate(Reference<IPredicate> const& term1, Reference<IPredicate> const& term2) : terms({term1, term2}) {} |
| 163 | |
| 164 | Future<bool> evaluate(Reference<IReadContext> const& context) override; |
| 165 | Reference<IPredicate> simplify() override; |
| 166 | std::string toString() override; |
| 167 | |
| 168 | Reference<IPredicate> simplify_not() override; |
| 169 | void simplify_and(SimplifyAndContext& combinable) override; |
| 170 | }; |
| 171 | |
| 172 | struct OrPredicate : IPredicate, ReferenceCounted<OrPredicate>, FastAllocated<OrPredicate> { |
| 173 | void addref() override { ReferenceCounted<OrPredicate>::addref(); } |