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;
|
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
|
static inline gboolean
|
||||||
remove_data_func (GcalRange *range,
|
remove_data_func (GcalRange *range,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
@@ -719,6 +747,23 @@ gcal_range_tree_get_data_at_range (GcalRangeTree *self,
|
|||||||
return data;
|
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:
|
* gcal_range_tree_count_entries_at_range:
|
||||||
* @self: a #GcalRangeTree
|
* @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,
|
GPtrArray* gcal_range_tree_get_data_at_range (GcalRangeTree *self,
|
||||||
GcalRange *range);
|
GcalRange *range);
|
||||||
|
|
||||||
|
gboolean gcal_range_tree_has_entries_at_range (GcalRangeTree *self,
|
||||||
|
GcalRange *range);
|
||||||
|
|
||||||
guint64 gcal_range_tree_count_entries_at_range (GcalRangeTree *self,
|
guint64 gcal_range_tree_count_entries_at_range (GcalRangeTree *self,
|
||||||
GcalRange *range);
|
GcalRange *range);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user