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 'intersection_selector.dart'; 7 : 8 : /// A selector that matches inputs that either of its sub-selectors match. 9 : class UnionSelector implements BooleanSelector { 10 : final BooleanSelector _selector1; 11 : final BooleanSelector _selector2; 12 : 13 0 : UnionSelector(this._selector1, this._selector2); 14 : 15 0 : @override 16 : List<String> get variables => 17 0 : _selector1.variables.toList()..addAll(_selector2.variables); 18 : 19 0 : @override 20 : bool evaluate(bool Function(String variable) semantics) => 21 0 : _selector1.evaluate(semantics) || _selector2.evaluate(semantics); 22 : 23 0 : @override 24 : BooleanSelector intersection(BooleanSelector other) => 25 0 : IntersectionSelector(this, other); 26 : 27 0 : @override 28 0 : BooleanSelector union(BooleanSelector other) => UnionSelector(this, other); 29 : 30 0 : @override 31 : void validate(bool Function(String variable) isDefined) { 32 0 : _selector1.validate(isDefined); 33 0 : _selector2.validate(isDefined); 34 : } 35 : 36 0 : @override 37 0 : String toString() => '($_selector1) && ($_selector2)'; 38 : 39 0 : @override 40 : bool operator ==(other) => 41 0 : other is UnionSelector && 42 0 : _selector1 == other._selector1 && 43 0 : _selector2 == other._selector2; 44 : 45 0 : @override 46 0 : int get hashCode => _selector1.hashCode ^ _selector2.hashCode; 47 : }