Exemplo n.º 1
0
        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(),
        };
Exemplo n.º 3
0
 public int Compare(
     IUpperBoundary <TPoint, TPointComparer> x,
     IUpperBoundary <TPoint, TPointComparer> y)
 {
     return(x.Compare(y, this.pointComparer));
 }