From 7f57cfeb83165350a1afebee6a44ee8bcc425ece Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 29 Jul 2023 13:53:46 +0300 Subject: [PATCH] range: Add API to check if range contains datetime This will be used by next commits to make some code more legible. --- src/core/gcal-range.c | 31 +++++++++++++++++++++++++++++++ src/core/gcal-range.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/src/core/gcal-range.c b/src/core/gcal-range.c index a85b16b8..b5521de6 100644 --- a/src/core/gcal-range.c +++ b/src/core/gcal-range.c @@ -508,3 +508,34 @@ gcal_range_to_string (GcalRange *self) return g_strdup_printf ("[%s | %s)", start_string, end_string); } + +/** + * gcal_range_contains_datetime: + * @self: a #GcalRange + * @datetime: a #GDateTime + * + * Checks if @datetime is contained within @self. + * + * Returns: %TRUE is @datetime is within the range described + * by @self, %FALSE otherwise + */ +gboolean +gcal_range_contains_datetime (GcalRange *self, + GDateTime *datetime) +{ + g_return_val_if_fail (self, FALSE); + g_return_val_if_fail (datetime, FALSE); + + switch (self->range_type) + { + case GCAL_RANGE_DEFAULT: + return g_date_time_compare (datetime, self->range_start) >= 0 && + g_date_time_compare (datetime, self->range_end) < 0; + + case GCAL_RANGE_DATE_ONLY: + return gcal_date_time_compare_date (datetime, self->range_start) >= 0 && + gcal_date_time_compare_date (datetime, self->range_end) <= 0; + default: + g_assert_not_reached (); + } +} diff --git a/src/core/gcal-range.h b/src/core/gcal-range.h index daa9bf13..e967ba34 100644 --- a/src/core/gcal-range.h +++ b/src/core/gcal-range.h @@ -106,6 +106,9 @@ GcalRange* gcal_range_union (GcalRange gchar* gcal_range_to_string (GcalRange *self); +gboolean gcal_range_contains_datetime (GcalRange *self, + GDateTime *datetime); + G_DEFINE_AUTOPTR_CLEANUP_FUNC (GcalRange, gcal_range_unref) G_END_DECLS