diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-12-18 21:36:14 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-12-18 21:36:14 (GMT) |
commit | d50544a3de540727137f2b13010ca4450f8ea10f (patch) | |
tree | 05e4ad65c25570016d5732f425a9eff2f4117d34 /src/arch/sharing/instance.c | |
parent | b0bcf250999b2242019f137e38f52390a86e71cd (diff) |
Used a fast sorted array to track shared instances instead of a simple hash table.
Diffstat (limited to 'src/arch/sharing/instance.c')
-rw-r--r-- | src/arch/sharing/instance.c | 55 |
1 files changed, 16 insertions, 39 deletions
diff --git a/src/arch/sharing/instance.c b/src/arch/sharing/instance.c index 956a4c7..a4cfcad 100644 --- a/src/arch/sharing/instance.c +++ b/src/arch/sharing/instance.c @@ -61,7 +61,7 @@ static void g_shared_instance_default_init(GSharedInstanceInterface *iface) /****************************************************************************** * * * Paramètres : instance = objet partagé à initialiser. * -* info = information à utiliser pour la mise en place. * +* template = informations à retrouver intégralement. * * * * Description : Initialise un nouvel objet partagé avec des informations. * * * @@ -71,14 +71,14 @@ static void g_shared_instance_default_init(GSharedInstanceInterface *iface) * * ******************************************************************************/ -bool g_shared_instance_init(GSharedInstance *instance, const void *info) +bool g_shared_instance_init(GSharedInstance *instance, const GSharedInstance *template) { bool result; /* Bilan à retourner */ GSharedInstanceIface *iface; /* Interface utilisée */ iface = G_SHARED_INSTANCE_GET_IFACE(instance); - result = iface->init(instance, info); + result = iface->init(instance, template); return result; @@ -156,54 +156,31 @@ void g_shared_instance_dec_references(GSharedInstance *instance) /****************************************************************************** * * -* Paramètres : instance = objet partagé à consulter. * -* info = compilation de d'information à analyser. * -* * -* Description : Indique l'objet partagé correspond à une description donnée. * -* * -* Retour : true si les détails centraux sont partagés, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -gboolean g_shared_instance_compare_info(const GSharedInstance *instance, const void *info) -{ - bool result; /* Bilan à retourner */ - GSharedInstanceIface *iface; /* Interface utilisée */ - - iface = G_SHARED_INSTANCE_GET_IFACE(instance); - - result = iface->cmp_info(instance, info); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : a = première instance d'objet partagé à comparer. * -* b = second instance d'objet partagé à comparer. * +* Paramètres : a = premier objet partagé à consulter. * +* b = second objet partagé à consulter. * * * -* Description : Détermine si deux instances partagées sont identiques. * +* Description : Compare de façon accélérée un object partagé avec un autre. * * * -* Retour : TRUE si les deux éléments partagés sont identiques, ou FALSE.* +* Retour : Bilan de la comparaison. * * * * Remarques : - * * * ******************************************************************************/ -gboolean g_shared_instance_is_equal(const GSharedInstance *a, const GSharedInstance *b) +int g_shared_instance_quickly_compare(const GSharedInstance **a, const GSharedInstance **b) { - gboolean result; /* Bilan à retourner */ + int result; /* Bilan à faire remonter */ GSharedInstanceIface *iface; /* Interface utilisée */ - assert(G_OBJECT_TYPE(a) == G_OBJECT_TYPE(b)); + /** + * Comme les insertions dans les tableaux triés à l'aide de qinsert() + * font passer la clef en premier argument et que celle ci n'est pas un + * objet valide, on inverse les arguments, puis on inverse le résultat obtenu. + */ - iface = G_SHARED_INSTANCE_GET_IFACE(a); + iface = G_SHARED_INSTANCE_GET_IFACE(*b); - result = iface->is_equal(a, b); + result = iface->qck_cmp(b, a) * -1; return result; |