summaryrefslogtreecommitdiff
path: root/src/arch/operand.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/operand.c')
-rw-r--r--src/arch/operand.c151
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. *
* *