diff options
Diffstat (limited to 'src/glibext/comparable.c')
-rw-r--r-- | src/glibext/comparable.c | 139 |
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; |