summaryrefslogtreecommitdiff
path: root/src/glibext/comparable.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/comparable.c')
-rw-r--r--src/glibext/comparable.c139
1 files changed, 25 insertions, 114 deletions
diff --git a/src/glibext/comparable.c b/src/glibext/comparable.c
index 8ce6941..95e7de7 100644
--- a/src/glibext/comparable.c
+++ b/src/glibext/comparable.c
@@ -1,8 +1,8 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
- * comparison.c - opérations de comparaison d'objets
+ * comparable.c - opérations de comparaison d'objets
*
- * Copyright (C) 2022 Cyrille Bagard
+ * Copyright (C) 2022-2025 Cyrille Bagard
*
* This file is part of Chrysalide.
*
@@ -21,23 +21,20 @@
*/
-#include "comparison.h"
+#include "comparable.h"
-#include <assert.h>
-
-
-#include "comparison-int.h"
+#include "comparable-int.h"
/* Procède à l'initialisation de l'interface de comparaison. */
-static void g_comparable_item_default_init(GComparableItemInterface *);
+static void g_comparable_object_default_init(GComparableObjectInterface *);
/* Détermine le type d'une interface pour un objet comparable. */
-G_DEFINE_INTERFACE(GComparableItem, g_comparable_item, G_TYPE_OBJECT)
+G_DEFINE_INTERFACE(GComparableObject, g_comparable_object, G_TYPE_OBJECT)
/******************************************************************************
@@ -52,35 +49,34 @@ G_DEFINE_INTERFACE(GComparableItem, g_comparable_item, G_TYPE_OBJECT)
* *
******************************************************************************/
-static void g_comparable_item_default_init(GComparableItemInterface *iface)
+static void g_comparable_object_default_init(GComparableObjectInterface *iface)
{
+ iface->compare = NULL;
}
/******************************************************************************
* *
-* Paramètres : item = premier objet à consulter pour une comparaison. *
+* Paramètres : object = premier objet à consulter pour une comparaison. *
* other = second objet à consulter pour une comparaison. *
-* op = opération de comparaison à réaliser. *
-* status = bilan des opérations de comparaison. [OUT] *
* *
-* Description : Réalise une comparaison entre objets selon un critère précis.*
+* Description : Réalise une comparaison étendue entre objets. *
* *
-* Retour : true si la comparaison a pu être effectuée, false sinon. *
+* Retour : Bilan de la comparaison. *
* *
* Remarques : - *
* *
******************************************************************************/
-bool g_comparable_item_compare_rich(const GComparableItem *item, const GComparableItem *other, RichCmpOperation op, bool *status)
+int g_comparable_object_compare(const GComparableObject *object, const GComparableObject *other)
{
- bool result; /* Etat à retourner */
- GComparableItemIface *iface; /* Interface utilisée */
+ int result; /* Bilan à retourner */
+ GComparableObjectInterface *iface; /* Interface utilisée */
- iface = G_COMPARABLE_ITEM_GET_IFACE(item);
+ iface = G_COMPARABLE_OBJECT_GET_IFACE(object);
- result = iface->cmp_rich(item, other, op, status);
+ result = iface->compare(object, other);
return result;
@@ -89,110 +85,25 @@ bool g_comparable_item_compare_rich(const GComparableItem *item, const GComparab
/******************************************************************************
* *
-* Paramètres : a = premier élément à consulter pour une comparaison. *
-* b = second objet à consulter pour une comparaison. *
-* op = opération de comparaison à réaliser. *
-* *
-* Description : Réalise une comparaison riche entre valeurs entière. *
-* *
-* Retour : Bilan des opérations de comparaison. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool compare_rich_integer_values_signed(long long a, long long b, RichCmpOperation op)
-{
- bool result; /* Bilan à retourner */
-
- switch (op)
- {
- case RCO_LT:
- result = (a < b);
- break;
-
- case RCO_LE:
- result = (a <= b);
- break;
-
- case RCO_EQ:
- result = (a == b);
- break;
-
- case RCO_NE:
- result = (a != b);
- break;
-
- case RCO_GT:
- result = (a > b);
- break;
-
- case RCO_GE:
- result = (a >= b);
- break;
-
- default:
- assert(false);
- result = false;
- break;
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : a = premier élément à consulter pour une comparaison. *
-* b = second objet à consulter pour une comparaison. *
-* op = opération de comparaison à réaliser. *
+* Paramètres : object = premier objet à consulter pour une comparaison. *
+* other = second objet à consulter pour une comparaison. *
* *
-* Description : Réalise une comparaison riche entre valeurs entière. *
+* Description : Détermine si deux objets sont fonctionnellement identiques. *
* *
-* Retour : Bilan des opérations de comparaison. *
+* Retour : Bilan de la comparaison. *
* *
* Remarques : - *
* *
******************************************************************************/
-bool compare_rich_integer_values_unsigned(unsigned long long a, unsigned long long b, RichCmpOperation op)
+gboolean g_comparable_object_is_equal(const GComparableObject *object, const GComparableObject *other)
{
- bool result; /* Bilan à retourner */
-
- switch (op)
- {
- case RCO_LT:
- result = (a < b);
- break;
-
- case RCO_LE:
- result = (a <= b);
- break;
-
- case RCO_EQ:
- result = (a == b);
- break;
-
- case RCO_NE:
- result = (a != b);
- break;
-
- case RCO_GT:
- result = (a > b);
- break;
-
- case RCO_GE:
- result = (a >= b);
- break;
+ gboolean result; /* Bilan à renvoyer */
+ int ret; /* Bilan d'une comparaison */
- default:
- assert(false);
- result = false;
- break;
+ ret = g_comparable_object_compare(object, other);
- }
+ result = (ret == 0);
return result;