summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/coreutil.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/coreutil.h')
-rw-r--r--src/lib/util/coreutil.h44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/lib/util/coreutil.h b/src/lib/util/coreutil.h
index 167f696970e..4e5526fc6f0 100644
--- a/src/lib/util/coreutil.h
+++ b/src/lib/util/coreutil.h
@@ -29,8 +29,48 @@ uint32_t bcd_2_dec(uint32_t a);
GREGORIAN CALENDAR HELPERS
***************************************************************************/
-int gregorian_is_leap_year(int year);
-int gregorian_days_in_month(int month, int year);
+constexpr bool gregorian_is_leap_year(int year)
+{
+ return !((year % 100) ? (year % 4) : (year % 400));
+}
+
+
+
+//-------------------------------------------------
+// gregorian_days_in_month - given a year and a one-counted
+// month, return the amount of days in that month
+//-------------------------------------------------
+
+inline int gregorian_days_in_month(int month, int year)
+{
+ int result;
+ switch (month)
+ {
+ case 4: case 6:
+ case 9: case 11:
+ // Thirty days have September, April, June, and November.
+ result = 30;
+ break;
+
+ case 1: case 3:
+ case 5: case 7:
+ case 8: case 10:
+ case 12:
+ // All the rest have Thirty One
+ result = 31;
+ break;
+
+ case 2:
+ // No exceptions, but save one: Twenty Eight hath February
+ // in fine, and each leap year Twenty Nine
+ result = gregorian_is_leap_year(year) ? 29 : 28;
+ break;
+
+ default:
+ throw false;
+ }
+ return result;
+}
/***************************************************************************