protected override FloatingVersion Evaluate(FloatingVersion x, FloatingVersion y) { // cannot be translated, // so we'll just merge the ranges var result = new FloatingVersion(); // LowerBound = Max(x.LowerBound, y.LowerBound) var lowerx = x.LowerBound.AnyToZero(); var lowery = y.LowerBound.AnyToZero(); var lowercomp = lowerx.CompareTo(lowery); if (lowercomp < 0 || (lowercomp == 0 && !x.LowerBoundExclusive)) { result.LowerBound = lowerx; result.LowerBoundExclusive = x.LowerBoundExclusive; } else { result.LowerBound = lowery; result.LowerBoundExclusive = y.LowerBoundExclusive; } // UpperBound = Min(x.UpperBound, y.UpperBound) var upperx = x.UpperBound.GetClosestHigher(); var uppery = y.UpperBound.GetClosestHigher(); var uppercomp = upperx.CompareTo(uppery); if (uppercomp > 0 || (uppercomp == 0 && !x.UpperBoundExclusive)) { result.UpperBound = x.UpperBound; result.UpperBoundExclusive = x.UpperBoundExclusive; } else { result.UpperBound = y.UpperBound; result.UpperBoundExclusive = y.UpperBoundExclusive; } // return(result); }
protected abstract FloatingVersion Evaluate(FloatingVersion x, FloatingVersion y);