From e3c4fb67cac173e37be320f48566d410eca87fed Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 29 Jun 2019 14:21:58 +0000 Subject: [PATCH] constraints: Add some internal apis Checking if a set is empty or a singleton can be done more efficiently than determining its size. --- gtk/gtkconstraintexpression.c | 12 ++++++++++++ gtk/gtkconstraintexpressionprivate.h | 6 ++++++ gtk/gtkconstraintsolver.c | 4 ++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gtk/gtkconstraintexpression.c b/gtk/gtkconstraintexpression.c index 382d9514b9..f3a0a37f79 100644 --- a/gtk/gtkconstraintexpression.c +++ b/gtk/gtkconstraintexpression.c @@ -505,6 +505,18 @@ gtk_constraint_variable_set_size (GtkConstraintVariableSet *set) return g_sequence_get_length (set->set); } +gboolean +gtk_constraint_variable_set_is_empty (GtkConstraintVariableSet *set) +{ + return g_sequence_is_empty (set->set); +} + +gboolean +gtk_constraint_variable_set_is_singleton (GtkConstraintVariableSet *set) +{ + return g_sequence_iter_next (g_sequence_get_begin_iter (set->set)) == g_sequence_get_end_iter (set->set); +} + /*< private > * GtkConstraintVariableSetIter: * diff --git a/gtk/gtkconstraintexpressionprivate.h b/gtk/gtkconstraintexpressionprivate.h index b498f88594..942915ad38 100644 --- a/gtk/gtkconstraintexpressionprivate.h +++ b/gtk/gtkconstraintexpressionprivate.h @@ -94,6 +94,12 @@ gboolean gtk_constraint_variable_set_remove (GtkConstraintVariableSet *set, GtkConstraintVariable *variable); +gboolean +gtk_constraint_variable_set_is_empty (GtkConstraintVariableSet *set); + +gboolean +gtk_constraint_variable_set_is_singleton (GtkConstraintVariableSet *set); + int gtk_constraint_variable_set_size (GtkConstraintVariableSet *set); diff --git a/gtk/gtkconstraintsolver.c b/gtk/gtkconstraintsolver.c index 278e2e4984..e0f3e418cd 100644 --- a/gtk/gtkconstraintsolver.c +++ b/gtk/gtkconstraintsolver.c @@ -1168,7 +1168,7 @@ gtk_constraint_solver_choose_subject (GtkConstraintSolver *self, GtkConstraintVariableSet *cset = g_hash_table_lookup (self->columns, t_v); if (cset == NULL || - (gtk_constraint_variable_set_size (cset) == 1 && + (gtk_constraint_variable_set_is_singleton (cset) && g_hash_table_contains (self->columns, self->objective))) { subject = t_v; @@ -1865,7 +1865,7 @@ gtk_constraint_solver_remove_constraint (GtkConstraintSolver *self, if (exit_var == NULL) { - if (gtk_constraint_variable_set_size (set) == 0) + if (gtk_constraint_variable_set_is_empty (set)) gtk_constraint_solver_remove_column (self, marker); else {