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 : @override 14 : Iterable<String> get variables sync* { 15 : yield* _selector1.variables; 16 : yield* _selector2.variables; 17 : } 18 : 19 0 : IntersectionSelector(this._selector1, this._selector2); 20 : 21 0 : @override 22 : bool evaluate(semantics) => 23 0 : _selector1.evaluate(semantics) && _selector2.evaluate(semantics); 24 : 25 0 : @override 26 : BooleanSelector intersection(BooleanSelector other) => 27 0 : IntersectionSelector(this, other); 28 : 29 0 : @override 30 0 : BooleanSelector union(BooleanSelector other) => UnionSelector(this, other); 31 : 32 0 : @override 33 : void validate(bool Function(String variable) isDefined) { 34 0 : _selector1.validate(isDefined); 35 0 : _selector2.validate(isDefined); 36 : } 37 : 38 0 : @override 39 0 : String toString() => '($_selector1) && ($_selector2)'; 40 : 41 0 : @override 42 : bool operator ==(other) => 43 0 : other is IntersectionSelector && 44 0 : _selector1 == other._selector1 && 45 0 : _selector2 == other._selector2; 46 : 47 0 : @override 48 0 : int get hashCode => _selector1.hashCode ^ _selector2.hashCode; 49 : }