Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Unified Diff: lib/src/version_range.dart

Issue 2035983002: Make VersionRange implement Comparable. (Closed) Base URL: git@github.com:dart-lang/pub_semver@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/src/version_range.dart
diff --git a/lib/src/version_range.dart b/lib/src/version_range.dart
index 145151f0af2e446b28aa516241ad046d3fea47f2..a8d60698f8d594c9cf9747a509a4a3618af2314a 100644
--- a/lib/src/version_range.dart
+++ b/lib/src/version_range.dart
@@ -2,6 +2,7 @@
// 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 'utils.dart';
import 'version.dart';
import 'version_constraint.dart';
import 'version_union.dart';
@@ -11,7 +12,11 @@ import 'version_union.dart';
/// If there is a minimum, then this only allows versions that are at that
/// minimum or greater. If there is a maximum, then only versions less than
/// that are allowed. In other words, this allows `>= min, < max`.
-class VersionRange implements VersionConstraint {
+///
+/// Version ranges are ordered first by their lower bounds, then by their upper
+/// bounds. For example, `>=1.0.0 <2.0.0` is before `>=1.5.0 <2.0.0` is before
+/// `>=1.5.0 <3.0.0`.
+class VersionRange implements Comparable<VersionRange>, VersionConstraint {
/// The minimum end of the range.
///
/// If [includeMin] is `true`, this will be the minimum allowed version.
@@ -315,6 +320,21 @@ class VersionRange implements VersionConstraint {
return new VersionConstraint.unionOf([this, other]);
}
+ int compareTo(VersionRange other) {
+ if (min == null) {
+ if (other.min == null) return compareMax(this, other);
+ return -1;
+ } else if (other.min == null) {
+ return 1;
+ }
+
+ var result = min.compareTo(other.min);
+ if (result != 0) return result;
+ if (includeMin != other.includeMin) return includeMin ? -1 : 1;
+
+ return compareMax(this, other);
+ }
+
String toString() {
var buffer = new StringBuffer();

Powered by Google App Engine
This is Rietveld 408576698