diff options
author | Thomas Haller <thaller@redhat.com> | 2016-09-23 14:32:50 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-09-23 15:13:15 +0200 |
commit | af78fd1c41b4b56a2a43fe1dc27e4b7a566f1549 (patch) | |
tree | 0f3e164efcb5dd11ef700d08d340cd3a98eb2830 | |
parent | 34321784da3fae41da920a4afefee511bf02cb74 (diff) | |
download | NetworkManager-th/caps-rh1375967.tar.gz |
core: use binary-search for nm_manager_set_capability()th/caps-rh1375967
And drop the unused function nm_manager_check_capability().
I don't think we need such a function server-side, as the
server usually has better ways to check whether a capability
is supported.
-rw-r--r-- | src/nm-manager.c | 50 | ||||
-rw-r--r-- | src/nm-manager.h | 1 |
2 files changed, 21 insertions, 30 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c index ca086b4432..dca31f22ff 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -5440,41 +5440,33 @@ dbus_connection_changed_cb (NMBusManager *dbus_mgr, /**********************************************************************/ -gboolean -nm_manager_check_capability (NMManager *self, - NMCapability cap) +void +nm_manager_set_capability (NMManager *self, + NMCapability cap) { - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); - int i; + NMManagerPrivate *priv; + guint32 cap_i; + gssize idx; - for (i = 0; i < priv->capabilities->len; i++) { - NMCapability test = g_array_index (priv->capabilities, guint32, i); - if (test == cap) - return TRUE; - if (test > cap) - return FALSE; - } + g_return_if_fail (NM_IS_MANAGER (self)); + if (cap < 1 || cap > NM_CAPABILITY_TEAM) + g_return_if_reached (); - return FALSE; -} + cap_i = (guint32) cap; -static int -cmp_caps (gconstpointer a, gconstpointer b) -{ - return *(gint *)a - *(gint *)b; -} + priv = NM_MANAGER_GET_PRIVATE (self); -void -nm_manager_set_capability (NMManager *self, - NMCapability cap) -{ - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); + idx = _nm_utils_arrayu32_find_binary_search (&g_array_index (priv->capabilities, guint32, 0), + priv->capabilities->len, + cap_i, + TRUE); + if (idx >= 0) + return; - if (!nm_manager_check_capability (self, cap)) { - g_array_append_val (priv->capabilities, cap); - g_array_sort (priv->capabilities, cmp_caps); - _notify (self, PROP_CAPABILITIES); - } + nm_assert ((~idx) <= (gssize) priv->capabilities->len); + + g_array_insert_val (priv->capabilities, ~idx, cap_i); + _notify (self, PROP_CAPABILITIES); } /**********************************************************************/ diff --git a/src/nm-manager.h b/src/nm-manager.h index deccbdba53..11c4eb4a18 100644 --- a/src/nm-manager.h +++ b/src/nm-manager.h @@ -112,7 +112,6 @@ gboolean nm_manager_deactivate_connection (NMManager *manager, NMDeviceStateReason reason, GError **error); -gboolean nm_manager_check_capability (NMManager *self, NMCapability cap); void nm_manager_set_capability (NMManager *self, NMCapability cap); #endif /* __NETWORKMANAGER_MANAGER_H__ */ |