Warning: session_start(): open(/var/lib/php/sessions/sess_1sl6i69kddr8q9f0c3srnpph4k, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass DateStructures {
asclass SomeDate {}
asclass SomeDateDate > SomeDate {} // day or higher granularity
asclass SomeTime > SomeDate {}
asclass SomeWeek > SomeDateDate {}
asclass DateProp > SomeDate {} // proposition on a date, e.g. a date range
// years
transformable srecord Year(int year) > SomeDateDate {}
transformable srecord CurrentYearPlus(int nYears) > SomeDateDate {}
// months
transformable srecord Month(int month, Year year) > SomeDateDate {
Month(int month) { this(month, null); }
}
transformable srecord CurrentMonthPlus(int nMonths) > SomeDateDate {}
// weeks
transformable srecord Week(int week, Year year) > SomeWeek {}
transformable srecord CurrentWeekPlus(int nWeeks) > SomeWeek {}
// days
transformable srecord Day(int day, Month month) > SomeDate {}
transformable srecord TodayPlus(int nDays) > SomeDate {}
// weekdays
transformable srecord Weekday(int weekday, SomeWeek week) > SomeDateDate {
// weekday is in Java count (1=Sunday)
Weekday(int weekday) { this.weekday = weekday; }
}
// hours
transformable srecord Hour(int hour, Bool isPM, Day day) > SomeTime {
Hour(int hour, Bool isPM) { this(hour, isPM, null); }
}
transformable srecord CurrentHourPlus(int nHours) > SomeTime {}
// minutes
transformable srecord Minute(int minute, Hour hour) > SomeTime {}
transformable srecord CurrentMinutePlus(int nMinutes) > SomeTime {}
// seconds
transformable srecord Second(int second, Minute minute) > SomeTime {}
// special stuff
transformable srecord BeginningOfTime > SomeDate {}
transformable srecord EndOfTime > SomeDate {}
// date ranges & boolean operations
transformable srecord Between(SomeDate from, SomeDate to) > DateProp {}
transformable srecord Or(DateProp a, DateProp b) > DateProp {}
transformable srecord And(DateProp a, DateProp b) > DateProp {}
transformable srecord Not(DateProp a) > DateProp {}
// some utility functions
sbool containsTimes(SomeDate d) {
ret defaultMetaTransformer().any(o -> o instanceof SomeTime, d);
}
sbool containsDateDates(SomeDate d) {
ret defaultMetaTransformer().any(o -> o instanceof SomeDateDate, d);
}
}