[telepathy-mission-control/master] McdAccountManager: make account lookup O(1) rather than O(n)

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Apr 13 05:14:08 PDT 2009


This means the AccountManager has to know the relationship between
"unique names" (which conflict with D-Bus terminology!) and account object
paths, but telepathy-spec basically already mandates that.
---
 src/mcd-account-manager.c |   23 ++++++++---------------
 1 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/src/mcd-account-manager.c b/src/mcd-account-manager.c
index 1796282..04c9687 100644
--- a/src/mcd-account-manager.c
+++ b/src/mcd-account-manager.c
@@ -902,27 +902,20 @@ mcd_account_manager_lookup_account (McdAccountManager *account_manager,
     return g_hash_table_lookup (priv->accounts, name);
 }
 
-static gboolean
-find_by_path (gpointer key, gpointer value, gpointer user_data)
-{
-    McdAccount *account = value;
-    const gchar *object_path = user_data;
-
-    if (strcmp (object_path,
-		mcd_account_get_object_path (account)) == 0)
-	return TRUE;
-    return FALSE;
-}
-
-/* NOTE: this might become unused when the presence-frame gets removed */
 McdAccount *
 mcd_account_manager_lookup_account_by_path (McdAccountManager *account_manager,
 					    const gchar *object_path)
 {
     McdAccountManagerPrivate *priv = account_manager->priv;
 
-    return g_hash_table_find (priv->accounts, find_by_path,
-			      (gpointer)object_path);
+    if (!g_str_has_prefix (object_path, MC_ACCOUNT_DBUS_OBJECT_BASE))
+    {
+        /* can't possibly be right */
+        return NULL;
+    }
+
+    return g_hash_table_lookup (priv->accounts,
+        object_path + (sizeof (MC_ACCOUNT_DBUS_OBJECT_BASE) - 1));
 }
 
 /**
-- 
1.5.6.5



More information about the telepathy-commits mailing list