diff options
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r-- | src/analysis/db/collection.c | 133 |
1 files changed, 36 insertions, 97 deletions
diff --git a/src/analysis/db/collection.c b/src/analysis/db/collection.c index 6e877a4..ce2d580 100644 --- a/src/analysis/db/collection.c +++ b/src/analysis/db/collection.c @@ -57,17 +57,17 @@ static void g_db_collection_dispose(GDbCollection *); /* Procède à la libération totale de la mémoire. */ static void g_db_collection_finalize(GDbCollection *); -/* Retrouve l'élément correspondant à un horodatage. */ -size_t g_db_collection_find_by_timestamped(GDbCollection *, const GDbItem *); - /* Ajoute un élément dans la liste des éléments actifs. */ static void g_db_collection_set_last_item(GDbCollection *, GDbItem *, bool); +/* Retrouve l'élément correspondant à un horodatage. */ +static size_t g_db_collection_find_by_timestamped(GDbCollection *, const GDbItem *); + /* Retire un élément de la liste des éléments courants. */ static void g_db_collection_unset_last_item(GDbCollection *, GDbItem *, size_t); /* Retrouve le premier élément correspondant à un horodatage. */ -size_t g_db_collection_find_by_timestamp(GDbCollection *, timestamp_t); +static size_t g_db_collection_find_by_timestamp(GDbCollection *, timestamp_t); @@ -586,98 +586,6 @@ GDbItem **g_db_collection_get_items(const GDbCollection *collec, size_t *count) /****************************************************************************** * * -* Paramètres : collec = ensemble d'éléments à consulter. * -* ... = clef identifiant de manière unique un élément. * -* * -* Description : Détermine si un élément est déjà présent ou non. * -* * -* Retour : Elément trouvé ou NULL si aucun. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GDbItem *g_db_collection_has_key(GDbCollection *collec, ...) -{ - GDbItem *result; /* Bilan à retourner */ - va_list ap; /* Liste d'arguments en plus */ - - va_start(ap, collec); - - result = G_DB_COLLECTION_GET_CLASS(collec)->has_key(collec, ap); - - va_end(ap); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : binary = élément binaire à consulter. * -* item = définition de l'élément à retrouver. * -* * -* Description : Retrouve l'élément correspondant à un horodatage. * -* * -* Retour : Indice valide pour un élément retrouvé, invalide sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -size_t g_db_collection_find_by_timestamped(GDbCollection *collec, const GDbItem *item) -{ - size_t result; /* Indice à retourner */ - GDbItem **found; /* Emplacement de la trouvaille*/ - - found = bsearch(&item, collec->items, collec->count, sizeof(GDbItem *), - (__compar_fn_t)g_db_item_cmp_timestamp); - - if (found == NULL) - result = collec->count; - else - result = found - collec->items; - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : collec = ensemble d'éléments à consulter. * -* item = élément complet dont un double est à rechercher. * -* * -* Description : Détermine si un élément est déjà présent ou non. * -* * -* Retour : true si un élément similaire est présent dans la collection. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool g_db_collection_has_item(GDbCollection *collec, GDbItem *item) -{ - bool result; /* Bilan à retourner */ - size_t index; /* Indice de l'élément trouvé */ - - /** - * Un verrou doit être posé ! - * Il n'y a pas d'assert() possible pour le vérifier... - */ - - index = g_db_collection_find_by_timestamped(collec, item); - - result = (index < collec->count); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : collec = ensemble d'éléments à considérer. * * item = élément de collection à manipuler. * * new = précise la nature de l'élément à insérer. * @@ -858,6 +766,37 @@ bool g_db_collection_drop_disabled_items(GDbCollection *collec, packed_buffer *p /****************************************************************************** * * +* Paramètres : binary = élément binaire à consulter. * +* item = définition de l'élément à retrouver. * +* * +* Description : Retrouve l'élément correspondant à un horodatage. * +* * +* Retour : Indice valide pour un élément retrouvé, invalide sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static size_t g_db_collection_find_by_timestamped(GDbCollection *collec, const GDbItem *item) +{ + size_t result; /* Indice à retourner */ + GDbItem **found; /* Emplacement de la trouvaille*/ + + found = bsearch(&item, collec->items, collec->count, sizeof(GDbItem *), + (__compar_fn_t)g_db_item_cmp_timestamp); + + if (found == NULL) + result = collec->count; + else + result = found - collec->items; + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : collec = ensemble d'éléments à considérer. * * item = élément de collection à manipuler. * * * @@ -980,7 +919,7 @@ static void g_db_collection_unset_last_item(GDbCollection *collec, GDbItem *item * * ******************************************************************************/ -size_t g_db_collection_find_by_timestamp(GDbCollection *collec, timestamp_t timestamp) +static size_t g_db_collection_find_by_timestamp(GDbCollection *collec, timestamp_t timestamp) { size_t result; /* Indice à retourner */ timestamp_t prev_ts; /* Horodatage précédent */ |