blob: c985be97680a5c86b6f00eadd1457295478e2bc0 [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import '../boolean_selector.dart';
import 'intersection_selector.dart';
/// A selector that matches inputs that either of its sub-selectors match.
class UnionSelector implements BooleanSelector {
final BooleanSelector _selector1;
final BooleanSelector _selector2;
UnionSelector(this._selector1, this._selector2);
@override
List<String> get variables =>
_selector1.variables.toList()..addAll(_selector2.variables);
@override
bool evaluate(semantics) =>
_selector1.evaluate(semantics) || _selector2.evaluate(semantics);
@override
BooleanSelector intersection(BooleanSelector other) =>
IntersectionSelector(this, other);
@override
BooleanSelector union(BooleanSelector other) => UnionSelector(this, other);
@override
void validate(bool Function(String variable) isDefined) {
_selector1.validate(isDefined);
_selector2.validate(isDefined);
}
@override
String toString() => '($_selector1) && ($_selector2)';
@override
bool operator ==(other) =>
other is UnionSelector &&
_selector1 == other._selector1 &&
_selector2 == other._selector2;
@override
int get hashCode => _selector1.hashCode ^ _selector2.hashCode;
}