summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-09-07 22:11:49 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-09-07 22:11:49 (GMT)
commitf663a08007095e58f60fcf9a815a8b3d31b87c83 (patch)
tree80da49384da78cb9f1b7f81e23e638e5d1dc054e /src/format
parent39ceed9ed4e4484919f9eecc35d0b51372e5a233 (diff)
Rewritten some code managing comments.
Diffstat (limited to 'src/format')
-rw-r--r--src/format/preload.c77
-rw-r--r--src/format/preload.h6
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 *);