public ComparatorSet(string spec) { _comparators = new List <SemverComparator> { }; spec = spec.Trim(); if (spec == "") { spec = "*"; } int position = 0; int end = spec.Length; while (position < end) { int iterStartPosition = position; // A comparator set might be an advanced range specifier // like ~1.2.3, ^1.2, or 1.*. // Check for these first before standard comparators: foreach (var desugarer in new Func <string, Tuple <int, SemverComparator[]> >[] { Desugarer.HyphenRange, Desugarer.TildeRange, Desugarer.CaretRange, Desugarer.StarRange, }) { var result = desugarer(spec.Substring(position)); if (result != null) { position += result.Item1; _comparators.AddRange(result.Item2); } } // Check for standard comparator with operator and version: var comparatorResult = SemverComparator.TryParse(spec.Substring(position)); if (comparatorResult != null) { position += comparatorResult.Item1; _comparators.Add(comparatorResult.Item2); } if (position == iterStartPosition) { // Didn't manage to read any valid comparators throw new ArgumentException(String.Format("Invalid range specification: \"{0}\"", spec)); } } }
private static SemverComparator[] minMaxComparators(SemanticVersion minVersion, SemanticVersion maxVersion, SemverComparator.Operator maxOperator = SemverComparator.Operator.LessThan) { var minComparator = new SemverComparator( SemverComparator.Operator.GreaterThanOrEqual, minVersion); if (maxVersion == null) { return(new[] { minComparator }); } else { var maxComparator = new SemverComparator( maxOperator, maxVersion); return(new[] { minComparator, maxComparator }); } }