[gnumeric] Deps: avoid a function call layer using hash iteration.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Deps: avoid a function call layer using hash iteration.
- Date: Wed, 1 Jul 2020 23:53:59 +0000 (UTC)
commit 04dc9534e1c2f51ab9fe87175709d4dd9ffd1993
Author: Morten Welinder <terra gnome org>
Date: Wed Jul 1 19:53:24 2020 -0400
Deps: avoid a function call layer using hash iteration.
src/dependent.c | 53 +++++++++++++++++------------------------------------
1 file changed, 17 insertions(+), 36 deletions(-)
---
diff --git a/src/dependent.c b/src/dependent.c
index d20eb37b2..e2cf90074 100644
--- a/src/dependent.c
+++ b/src/dependent.c
@@ -1877,47 +1877,28 @@ cell_queue_recalc (GnmCell *cell)
}
}
-typedef struct {
- int col, row;
- GnmDepFunc func;
- gpointer user;
-} search_rangedeps_closure_t;
-
static void
-cb_search_rangedeps (gpointer key, G_GNUC_UNUSED gpointer value,
- gpointer closure)
+cell_foreach_range_dep (GnmCell const *cell, GnmDepFunc func, gpointer user)
{
- search_rangedeps_closure_t const *c = closure;
- DependencyRange const *deprange = key;
- GnmRange const *range = &(deprange->range);
+ Sheet *sheet = cell->base.sheet;
+ GHashTable *bucket =
+ sheet->deps->range_hash[BUCKET_OF_ROW (cell->pos.row)];
+ GHashTableIter hiter;
+ gpointer key;
-#if 0
- /* When things get slow this is a good test to enable */
- static int counter = 0;
- if ((++counter % 100000) == 0)
- g_printerr ("%d\n", counter / 100000);
-#endif
+ if (!bucket)
+ return;
- if (range_contains (range, c->col, c->row)) {
- GnmDepFunc func = c->func;
- micro_hash_foreach_dep (deprange->deps, dep,
- (func) (dep, c->user););
- }
-}
+ g_hash_table_iter_init (&hiter, bucket);
+ while (g_hash_table_iter_next (&hiter, &key, NULL)) {
+ DependencyRange const *deprange = key;
+ GnmRange const *range = &(deprange->range);
-static void
-cell_foreach_range_dep (GnmCell const *cell, GnmDepFunc func, gpointer user)
-{
- search_rangedeps_closure_t closure;
- GHashTable *bucket =
- cell->base.sheet->deps->range_hash[BUCKET_OF_ROW (cell->pos.row)];
-
- if (bucket != NULL) {
- closure.col = cell->pos.col;
- closure.row = cell->pos.row;
- closure.func = func;
- closure.user = user;
- g_hash_table_foreach (bucket, &cb_search_rangedeps, &closure);
+ if (!range_contains (range, cell->pos.col, cell->pos.row))
+ continue;
+
+ micro_hash_foreach_dep (deprange->deps, dep,
+ func (dep, user););
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]