diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-12-18 15:32:27 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-12-18 15:32:27 (GMT) |
commit | b0bcf250999b2242019f137e38f52390a86e71cd (patch) | |
tree | f3436a3ddbbd4773005ecb891630a815ed001341 /src/arch/operand.c | |
parent | 6bde4016160057a22234d4ed698903dca52ce162 (diff) |
Shared all Dalvik operands between all their users.
Diffstat (limited to 'src/arch/operand.c')
-rw-r--r-- | src/arch/operand.c | 151 |
1 files changed, 150 insertions, 1 deletions
diff --git a/src/arch/operand.c b/src/arch/operand.c index b355afd..ec970ea 100644 --- a/src/arch/operand.c +++ b/src/arch/operand.c @@ -38,16 +38,34 @@ static void g_arch_operand_class_init(GArchOperandClass *); /* Initialise une instance d'opérande d'architecture. */ static void g_arch_operand_init(GArchOperand *); +/* Procède à l'initialisation de l'interface de partage. */ +static void g_arch_operand_interface_init(GSharedInstanceInterface *); + /* Supprime toutes les références externes. */ static void g_arch_operand_dispose(GArchOperand *); /* Procède à la libération totale de la mémoire. */ static void g_arch_operand_finalize(GArchOperand *); +/* Initialise un nouvel objet partagé avec des informations. */ +static bool g_arch_operand_do_init(GArchOperand *, const void *); + +/* Fournit la valeur du compteur de partage. */ +static unsigned int g_arch_operand_get_references(const GArchOperand *); + +/* Incrémente le compteur de partage. */ +static void g_arch_operand_inc_references(GArchOperand *); + +/* Décrémente le compteur de partage. */ +static void g_arch_operand_dec_references(GArchOperand *); + +/* Indique l'objet partagé correspond à une description donnée. */ +static gboolean g_arch_operand_compare_info(const GArchOperand *, const void *); /* Indique le type défini pour un opérande d'architecture. */ -G_DEFINE_TYPE(GArchOperand, g_arch_operand, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_CODE(GArchOperand, g_arch_operand, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE(G_TYPE_SHARED_INSTANCE, g_arch_operand_interface_init)); @@ -95,6 +113,32 @@ static void g_arch_operand_init(GArchOperand *operand) /****************************************************************************** * * +* Paramètres : iface = interface GLib à initialiser. * +* * +* Description : Procède à l'initialisation de l'interface de partage. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_arch_operand_interface_init(GSharedInstanceInterface *iface) +{ + iface->init = (init_shared_fc)g_arch_operand_do_init; + + iface->get_ref = (get_shared_ref_fc)g_arch_operand_get_references; + iface->inc_ref = (inc_shared_ref_fc)g_arch_operand_inc_references; + iface->dec_ref = (dec_shared_ref_fc)g_arch_operand_dec_references; + + iface->cmp_info = (compare_shared_info_fc)g_arch_operand_compare_info; + iface->is_equal = (is_shared_equal_fc)g_arch_operand_compare; + +} + + +/****************************************************************************** +* * * Paramètres : operand = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * @@ -135,6 +179,111 @@ static void g_arch_operand_finalize(GArchOperand *operand) /****************************************************************************** * * +* Paramètres : operand = objet partagé à initialiser. * +* info = information à utiliser pour la mise en place. * +* * +* Description : Initialise un nouvel objet partagé avec des informations. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool g_arch_operand_do_init(GArchOperand *operand, const void *info) +{ + bool result; /* Bilan à retourner */ + + result = G_ARCH_OPERAND_GET_CLASS(operand)->init(G_SHARED_INSTANCE(operand), info); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : operand = objet partagé à consulter. * +* * +* Description : Fournit la valeur du compteur de partage. * +* * +* Retour : Nombre de partages courant. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static unsigned int g_arch_operand_get_references(const GArchOperand *operand) +{ + return operand->shared_count; + +} + + +/****************************************************************************** +* * +* Paramètres : operand = objet partagé à modifier. * +* * +* Description : Incrémente le compteur de partage. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_arch_operand_inc_references(GArchOperand *operand) +{ + operand->shared_count++; + +} + + +/****************************************************************************** +* * +* Paramètres : operand = objet partagé à modifier. * +* * +* Description : Décrémente le compteur de partage. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_arch_operand_dec_references(GArchOperand *operand) +{ + operand->shared_count--; + +} + + +/****************************************************************************** +* * +* Paramètres : operand = 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 : - * +* * +******************************************************************************/ + +static gboolean g_arch_operand_compare_info(const GArchOperand *operand, const void *info) +{ + bool result; /* Bilan à retourner */ + + result = G_ARCH_OPERAND_GET_CLASS(operand)->cmp_info(G_SHARED_INSTANCE(operand), info); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : a = premier opérande à consulter. * * b = second opérande à consulter. * * * |