/// <summary> /// Converts the value of the current <see cref="GameVersion"/> to its equivalent /// <see cref="GameVersionRange"/>. /// </summary> /// <returns> /// <para> /// A <see cref="GameVersionRange"/> which specifies a set of versions equivalent to the current /// <see cref="GameVersion"/>. /// </para> /// <para> /// For example, the version "1.0.0.0" would be equivalent to the range ["1.0.0.0", "1.0.0.0"], while the /// version "1.0" would be equivalent to the range ["1.0.0.0", "1.1.0.0"). Where '[' and ']' represent /// inclusive bounds and '(' and ')' represent exclusive bounds. /// </para> /// </returns> public GameVersionRange ToVersionRange() { GameVersionBound lower; GameVersionBound upper; if (IsBuildDefined) { lower = new GameVersionBound(this, inclusive: true); upper = new GameVersionBound(this, inclusive: true); } else if (IsPatchDefined) { lower = new GameVersionBound(new GameVersion(Major, Minor, Patch, 0), inclusive: true); upper = new GameVersionBound(new GameVersion(Major, Minor, Patch + 1, 0), inclusive: false); } else if (IsMinorDefined) { lower = new GameVersionBound(new GameVersion(Major, Minor, 0, 0), inclusive: true); upper = new GameVersionBound(new GameVersion(Major, Minor + 1, 0, 0), inclusive: false); } else if (IsMajorDefined) { lower = new GameVersionBound(new GameVersion(Major, 0, 0, 0), inclusive: true); upper = new GameVersionBound(new GameVersion(Major + 1, 0, 0, 0), inclusive: false); } else { lower = GameVersionBound.Unbounded; upper = GameVersionBound.Unbounded; } return(new GameVersionRange(lower, upper)); }
public GameVersionRange IntersectWith(GameVersionRange other) { if (ReferenceEquals(other, null)) { throw new ArgumentNullException("other"); } var highestLow = GameVersionBound.Highest(Lower, other.Lower); var lowestHigh = GameVersionBound.Lowest(Upper, other.Upper); return(IsEmpty(highestLow, lowestHigh) ? null : new GameVersionRange(highestLow, lowestHigh)); }
public GameVersionRange(GameVersionBound lower, GameVersionBound upper) { if (ReferenceEquals(lower, null)) { throw new ArgumentNullException("lower"); } if (ReferenceEquals(upper, null)) { throw new ArgumentNullException("upper"); } Lower = lower; Upper = upper; _string = DeriveString(this); }
private static bool IsEmpty(GameVersionBound lower, GameVersionBound upper) { return(upper.Value < lower.Value || (lower.Value == upper.Value && (!lower.Inclusive || !upper.Inclusive))); }