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:
committed by
Marge Bot
parent
807f5608b1
commit
5fe24582d4
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user