diff options
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/preload.c | 77 | ||||
-rw-r--r-- | src/format/preload.h | 6 |
2 files changed, 76 insertions, 7 deletions
diff --git a/src/format/preload.c b/src/format/preload.c index dc254b2..c36db93 100644 --- a/src/format/preload.c +++ b/src/format/preload.c @@ -24,6 +24,9 @@ #include "preload.h" +#include <assert.h> + + #include "preload-int.h" @@ -629,7 +632,7 @@ void _g_preload_info_add_comment(GPreloadInfo *info, GDbComment *comment) * * * Description : Recherche un commentaire dans des préchargements. * * * -* Retour : Eventuel commenaire retrouvé ou NULL. * +* Retour : Eventuel commentaire retrouvé ou NULL. * * * * Remarques : - * * * @@ -640,23 +643,52 @@ GDbComment *_g_preload_info_find_comment_at(GPreloadInfo *info, const vmpa2t *ad GDbComment *result; /* Trouvaille à retourner */ GDbComment **ptr; /* Adresse dans le tableau */ - int cmp_comment_by_addr(const vmpa2t *key, const GDbComment * const *comment) + ptr = find_item_in_flat_array(info->comments, sizeof(GDbComment *), + (__compar_fn_t)compare_comment_by_addr, addr); + + if (ptr != NULL) { - const vmpa2t *caddr; /* Position du commentaire */ + result = *ptr; + g_object_ref(G_OBJECT(result)); + } + else + result = NULL; - caddr = g_db_comment_get_address(*comment); + return result; - return cmp_vmpa(key, caddr); +} - } + +/****************************************************************************** +* * +* Paramètres : info = instance à mettre à consulter. * +* addr = localisation du commentaire recherché. * +* index = indice du commentaire retrouvé ou NULL. [OUT] * +* * +* Description : Recherche un commentaire dans des préchargements. * +* * +* Retour : Eventuel commentaire retrouvé ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GDbComment *g_preload_info_find_comment_at(GPreloadInfo *info, const vmpa2t *addr, size_t *index) +{ + GDbComment *result; /* Trouvaille à retourner */ + GDbComment **ptr; /* Adresse dans le tableau */ ptr = find_item_in_flat_array(info->comments, sizeof(GDbComment *), - (__compar_fn_t)cmp_comment_by_addr, addr); + (__compar_fn_t)compare_comment_by_addr, addr); if (ptr != NULL) { result = *ptr; g_object_ref(G_OBJECT(result)); + + if (index != NULL) + *index = ((void **)ptr - info->comments); + } else result = NULL; @@ -668,6 +700,37 @@ GDbComment *_g_preload_info_find_comment_at(GPreloadInfo *info, const vmpa2t *ad /****************************************************************************** * * +* Paramètres : info = instance à mettre à jour. * +* index = indice du commentaire à remplacer. * +* comment = commentaire à venir associer. * +* * +* Description : Remplace un commentaire par un autre à un emplacement donné. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_preload_info_replace_comment_at(GPreloadInfo *info, size_t index, GDbComment *comment) +{ +#ifndef NDEBUG + GDbComment **current; /* Commentaire à remplacer */ +#endif + +#ifndef NDEBUG + current = get_flat_array_item(info->comments, index, sizeof(GDbComment *)); + + assert(cmp_vmpa(g_db_comment_get_address(*current), g_db_comment_get_address(comment))); +#endif + + rpl_item_in_flat_array(info->comments, index, &comment, sizeof(GDbComment *)); + +} + + +/****************************************************************************** +* * * Paramètres : info = instance à consulter. * * * * Description : Indique la quantité de commentaires préchargés disponibles. * diff --git a/src/format/preload.h b/src/format/preload.h index 5557253..587c35d 100644 --- a/src/format/preload.h +++ b/src/format/preload.h @@ -102,6 +102,12 @@ void _g_preload_info_add_comment(GPreloadInfo *, GDbComment *); /* Recherche un commentaire dans des préchargements. */ GDbComment *_g_preload_info_find_comment_at(GPreloadInfo *, const vmpa2t *); +/* Recherche un commentaire dans des préchargements. */ +GDbComment *g_preload_info_find_comment_at(GPreloadInfo *, const vmpa2t *, size_t *); + +/* Remplace un commentaire par un autre à un emplacement donné. */ +void g_preload_info_replace_comment_at(GPreloadInfo *, size_t, GDbComment *); + /* Indique la quantité de commentaires préchargés disponibles. */ size_t _g_preload_info_count_comments(const GPreloadInfo *); |