1+ using System ;
2+
3+ namespace Foundation . Core
4+ {
5+ public static class DateOnlyIntervalRelations
6+ {
7+ public static bool Precedes ( this DateOnlyInterval x , DateOnlyInterval y ) => x . End . Next < y . Start ;
8+ public static bool Meets ( this DateOnlyInterval x , DateOnlyInterval y ) => x . End . Next == y . Start ;
9+ public static bool OverlapsWith ( this DateOnlyInterval x , DateOnlyInterval y ) => x . Start < y . Start && y . Start <= x . End && x . End < y . End ;
10+ public static bool Starts ( this DateOnlyInterval x , DateOnlyInterval y ) => x . Start == y . Start && x . End < y . End ;
11+ public static bool During ( this DateOnlyInterval x , DateOnlyInterval y ) => y . Start < x . Start && x . End < y . End ;
12+ public static bool Finishes ( this DateOnlyInterval x , DateOnlyInterval y ) => y . Start < x . Start && x . End == y . End ;
13+ public static bool IsPrecededBy ( this DateOnlyInterval x , DateOnlyInterval y ) => Precedes ( y , x ) ;
14+ public static bool IsMetBy ( this DateOnlyInterval x , DateOnlyInterval y ) => Meets ( y , x ) ;
15+ public static bool IsOverlappedBy ( this DateOnlyInterval x , DateOnlyInterval y ) => OverlapsWith ( y , x ) ;
16+ public static bool IsStartedBy ( this DateOnlyInterval x , DateOnlyInterval y ) => Starts ( y , x ) ;
17+ public static bool Contains ( this DateOnlyInterval x , DateOnlyInterval y ) => During ( y , x ) ;
18+ public static bool IsFinishedBy ( this DateOnlyInterval x , DateOnlyInterval y ) => Finishes ( y , x ) ;
19+ public static bool IsEqualTo ( this DateOnlyInterval x , DateOnlyInterval y ) => x . Start == y . Start && x . End == y . End ;
20+
21+ public static TemporalIntervalRelation GetTemporalIntervalRelation ( this DateOnlyInterval x , DateOnlyInterval y )
22+ {
23+ TemporalIntervalRelation relation ;
24+
25+ if ( Precedes ( x , y ) )
26+ relation = TemporalIntervalRelation . Precedes ;
27+ else if ( Meets ( x , y ) )
28+ relation = TemporalIntervalRelation . Meets ;
29+ else if ( OverlapsWith ( x , y ) )
30+ relation = TemporalIntervalRelation . OverlapsWith ;
31+ else if ( Starts ( x , y ) )
32+ relation = TemporalIntervalRelation . Starts ;
33+ else if ( During ( x , y ) )
34+ relation = TemporalIntervalRelation . During ;
35+ else if ( Finishes ( x , y ) )
36+ relation = TemporalIntervalRelation . Finishes ;
37+ else if ( IsPrecededBy ( x , y ) )
38+ relation = TemporalIntervalRelation . IsPrecededBy ;
39+ else if ( IsMetBy ( x , y ) )
40+ relation = TemporalIntervalRelation . IsMetBy ;
41+ else if ( IsOverlappedBy ( x , y ) )
42+ relation = TemporalIntervalRelation . IsOverlappedBy ;
43+ else if ( IsStartedBy ( x , y ) )
44+ relation = TemporalIntervalRelation . IsStartedBy ;
45+ else if ( Contains ( x , y ) )
46+ relation = TemporalIntervalRelation . Contains ;
47+ else if ( IsFinishedBy ( x , y ) )
48+ relation = TemporalIntervalRelation . IsFinishedBy ;
49+ else if ( IsEqualTo ( x , y ) )
50+ relation = TemporalIntervalRelation . IsEqualTo ;
51+ else
52+ throw new InvalidOperationException ( ) ;
53+
54+ return relation ;
55+ }
56+ }
57+ }
0 commit comments