Line data Source code
1 : // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 : // for details. All rights reserved. Use of this source code is governed by a
3 : // BSD-style license that can be found in the LICENSE file.
4 :
5 : import '../boolean_selector.dart';
6 : import 'union_selector.dart';
7 :
8 : /// A selector that matches inputs that both of its sub-selectors match.
9 : class IntersectionSelector implements BooleanSelector {
10 : final BooleanSelector _selector1;
11 : final BooleanSelector _selector2;
12 :
13 : Iterable<String> get variables sync* {
14 0 : yield* _selector1.variables;
15 0 : yield* _selector2.variables;
16 : }
17 :
18 0 : IntersectionSelector(this._selector1, this._selector2);
19 :
20 : bool evaluate(semantics) =>
21 0 : _selector1.evaluate(semantics) && _selector2.evaluate(semantics);
22 :
23 : BooleanSelector intersection(BooleanSelector other) =>
24 0 : new IntersectionSelector(this, other);
25 :
26 : BooleanSelector union(BooleanSelector other) =>
27 0 : new UnionSelector(this, other);
28 :
29 : void validate(bool isDefined(String variable)) {
30 0 : _selector1.validate(isDefined);
31 0 : _selector2.validate(isDefined);
32 : }
33 :
34 0 : String toString() => "($_selector1) && ($_selector2)";
35 :
36 : bool operator==(other) =>
37 0 : other is IntersectionSelector &&
38 0 : _selector1 == other._selector1 &&
39 0 : _selector2 == other._selector2;
40 :
41 0 : int get hashCode => _selector1.hashCode ^ _selector2.hashCode;
42 : }
|