core/range-tree: Add gcal_range_tree_has_entries_at_range

It checks if there's any entry in that range. It's a little faster
than gcal_range_tree_count_entries_at_range() because it stops at
the first entry that matches it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
This commit is contained in:
Georges Basile Stavracas Neto
2026-05-03 16:57:52 +00:00
committed by Marge Bot
parent 807f5608b1
commit 5fe24582d4
2 changed files with 48 additions and 0 deletions
+45
View File
@@ -431,6 +431,34 @@ count_entries_at_range (GcalRange *range,
return GCAL_TRAVERSE_CONTINUE;
}
static inline gboolean
has_entries_at_range (GcalRange *range,
gpointer data,
gpointer user_data)
{
GcalRangePosition position;
GcalRangeOverlap overlap;
struct {
GcalRange *range;
gboolean has_entries;
} *gather_data = user_data;
overlap = gcal_range_calculate_overlap (range, gather_data->range, &position);
if (overlap == GCAL_RANGE_NO_OVERLAP)
{
if (position == GCAL_RANGE_BEFORE)
return GCAL_TRAVERSE_CONTINUE;
if (position == GCAL_RANGE_AFTER)
return GCAL_TRAVERSE_STOP;
}
gather_data->has_entries = TRUE;
return GCAL_TRAVERSE_STOP;
}
static inline gboolean
remove_data_func (GcalRange *range,
gpointer data,
@@ -719,6 +747,23 @@ gcal_range_tree_get_data_at_range (GcalRangeTree *self,
return data;
}
gboolean
gcal_range_tree_has_entries_at_range (GcalRangeTree *self,
GcalRange *range)
{
struct {
GcalRange *range;
gboolean has_entry;
} gather_data = { range, FALSE };
g_return_val_if_fail (self, FALSE);
g_return_val_if_fail (range, FALSE);
gcal_range_tree_traverse (self, G_IN_ORDER, has_entries_at_range, &gather_data);
return gather_data.has_entry;
}
/**
* gcal_range_tree_count_entries_at_range:
* @self: a #GcalRangeTree
+3
View File
@@ -79,6 +79,9 @@ GPtrArray* gcal_range_tree_get_all_data (GcalRangeTree
GPtrArray* gcal_range_tree_get_data_at_range (GcalRangeTree *self,
GcalRange *range);
gboolean gcal_range_tree_has_entries_at_range (GcalRangeTree *self,
GcalRange *range);
guint64 gcal_range_tree_count_entries_at_range (GcalRangeTree *self,
GcalRange *range);