public static IInterval <TPoint, TPointComparer> Build <TPoint, TPointComparer>( ILowerBoundary <TPoint, TPointComparer> lowerBoundary, IUpperBoundary <TPoint, TPointComparer> upperBoundary, TPointComparer pointComparer) where TPoint : notnull where TPointComparer : IComparer <TPoint>, new() => (lowerBoundary, upperBoundary) switch { (LowerClosedBoundary <TPoint, TPointComparer> lowerClosed, UpperClosedBoundary <TPoint, TPointComparer> upperClosed) => Build(lowerClosed, upperClosed, pointComparer), (LowerClosedBoundary <TPoint, TPointComparer> lowerClosed, UpperOpenBoundary <TPoint, TPointComparer> upperOpen) => Build(lowerClosed, upperOpen, pointComparer), (LowerClosedBoundary <TPoint, TPointComparer> lowerClosed, UpperInfinityBoundary <TPoint, TPointComparer> _) => new ClosedInfinityInterval <TPoint, TPointComparer>(lowerClosed), (LowerOpenBoundary <TPoint, TPointComparer> lowerOpen, UpperClosedBoundary <TPoint, TPointComparer> upperClosed) => Build(lowerOpen, upperClosed, pointComparer), (LowerOpenBoundary <TPoint, TPointComparer> lowerOpen, UpperOpenBoundary <TPoint, TPointComparer> upperOpen) => Build(lowerOpen, upperOpen, pointComparer), (LowerOpenBoundary <TPoint, TPointComparer> lowerOpen, UpperInfinityBoundary <TPoint, TPointComparer> _) => new OpenInfinityInterval <TPoint, TPointComparer>(lowerOpen), (LowerInfinityBoundary <TPoint, TPointComparer> lowerInfinity, UpperClosedBoundary <TPoint, TPointComparer> upperClosed) => new InfinityClosedInterval <TPoint, TPointComparer>(upperClosed), (LowerInfinityBoundary <TPoint, TPointComparer> lowerInfinity, UpperOpenBoundary <TPoint, TPointComparer> upperOpen) => new InfinityOpenInterval <TPoint, TPointComparer>(upperOpen), (LowerInfinityBoundary <TPoint, TPointComparer> _, UpperInfinityBoundary <TPoint, TPointComparer> _) => default(InfinityInterval <TPoint, TPointComparer>), _ => throw new ArgumentException() };
public static int Compare <TPoint, TPointComparer>( this IUpperBoundary <TPoint, TPointComparer> lowerBoundary, IUpperBoundary <TPoint, TPointComparer> otherUpperBoundary, TPointComparer pointComparer) where TPoint : notnull where TPointComparer : IComparer <TPoint>, new() => (lowerBoundary, otherUpperBoundary) switch { (UpperClosedBoundary <TPoint, TPointComparer> leftClosed, UpperClosedBoundary <TPoint, TPointComparer> rightClosed) => leftClosed.Compare(rightClosed, pointComparer), (UpperClosedBoundary <TPoint, TPointComparer> leftClosed, UpperOpenBoundary <TPoint, TPointComparer> rightOpen) => leftClosed.Compare(rightOpen, pointComparer), (UpperClosedBoundary <TPoint, TPointComparer> leftClosed, UpperInfinityBoundary <TPoint, TPointComparer> rightInfinity) => leftClosed.Compare(rightInfinity, pointComparer), (UpperOpenBoundary <TPoint, TPointComparer> leftOpen, UpperOpenBoundary <TPoint, TPointComparer> rightOpen) => leftOpen.Compare(rightOpen, pointComparer), (UpperOpenBoundary <TPoint, TPointComparer> leftOpen, UpperClosedBoundary <TPoint, TPointComparer> rightClosed) => leftOpen.Compare(rightClosed, pointComparer), (UpperOpenBoundary <TPoint, TPointComparer> leftOpen, UpperInfinityBoundary <TPoint, TPointComparer> rightInfinity) => leftOpen.Compare(rightInfinity, pointComparer), (UpperInfinityBoundary <TPoint, TPointComparer> leftInfinity, UpperInfinityBoundary <TPoint, TPointComparer> rightInfinity) => leftInfinity.Compare(rightInfinity, pointComparer), (UpperInfinityBoundary <TPoint, TPointComparer> leftInfinity, UpperClosedBoundary <TPoint, TPointComparer> rightClosed) => leftInfinity.Compare(rightClosed, pointComparer), (UpperInfinityBoundary <TPoint, TPointComparer> leftInfinity, UpperOpenBoundary <TPoint, TPointComparer> rightOpen) => leftInfinity.Compare(rightOpen, pointComparer), _ => throw new ArgumentException(), };
public int Compare( IUpperBoundary <TPoint, TPointComparer> x, IUpperBoundary <TPoint, TPointComparer> y) { return(x.Compare(y, this.pointComparer)); }