Example #1
0
        /// <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));
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
 private static bool IsEmpty(GameVersionBound lower, GameVersionBound upper)
 {
     return(upper.Value < lower.Value ||
            (lower.Value == upper.Value && (!lower.Inclusive || !upper.Inclusive)));
 }