From c434b8ccaae01810903e098ad8e66f8ead3141eb Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 29 Sep 2019 23:57:42 +0200
Subject: Removed useless features from DB collections.

---
 src/analysis/db/collection-int.h |   4 --
 src/analysis/db/collection.c     | 133 +++++++++++----------------------------
 src/analysis/db/collection.h     |   6 --
 src/analysis/db/items/bookmark.c |  53 ----------------
 src/analysis/db/items/comment.c  |  53 ----------------
 src/analysis/db/items/move.c     |  53 ----------------
 src/analysis/db/items/switcher.c |  53 ----------------
 src/gui/menus/edition.c          |  21 -------
 8 files changed, 36 insertions(+), 340 deletions(-)

diff --git a/src/analysis/db/collection-int.h b/src/analysis/db/collection-int.h
index c9d37bf..1355592 100644
--- a/src/analysis/db/collection-int.h
+++ b/src/analysis/db/collection-int.h
@@ -38,9 +38,6 @@ typedef bool (* collec_create_db_table_fc) (const GDbCollection *, sqlite3 *);
 /* Charge les valeurs utiles pour une localisation. */
 typedef bool (* collec_load_item) (GDbCollection *, const bound_value *, size_t);
 
-/* Détermine si un élément est déjà présent ou non. */
-typedef GDbItem * (* collec_has_key_fc) (GDbCollection *, va_list);
-
 
 
 /* Collection générique d'éléments (instance) */
@@ -69,7 +66,6 @@ struct _GDbCollectionClass
 
     collec_create_db_table_fc create_table; /* Création de la table en SQL */
     collec_load_item load_item;             /* Charge un élément           */
-    collec_has_key_fc has_key;              /* Recherche de présence       */
 
     /* Signaux */
 
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        */
diff --git a/src/analysis/db/collection.h b/src/analysis/db/collection.h
index 76d134b..1822a36 100644
--- a/src/analysis/db/collection.h
+++ b/src/analysis/db/collection.h
@@ -95,12 +95,6 @@ void g_db_collection_lock_unlock(GDbCollection *, bool, bool);
 /* Renvoie la liste des éléments rassemblés. */
 GDbItem **g_db_collection_get_items(const GDbCollection *, size_t *);
 
-/* Détermine si un élément est déjà présent ou non. */
-GDbItem *g_db_collection_has_key(GDbCollection *, ...);
-
-/* Détermine si un élément est déjà présent ou non. */
-bool g_db_collection_has_item(GDbCollection *, GDbItem *);
-
 /* Procède à l'ajout d'un nouvel élément dans la collection. */
 bool _g_db_collection_add_item(GDbCollection *, GDbItem *, bool);
 
diff --git a/src/analysis/db/items/bookmark.c b/src/analysis/db/items/bookmark.c
index 8c15e5a..0f985d6 100644
--- a/src/analysis/db/items/bookmark.c
+++ b/src/analysis/db/items/bookmark.c
@@ -141,9 +141,6 @@ static void g_bookmark_collection_finalize(GBookmarkCollection *);
 /* Crée la table des signets dans une base de données. */
 static bool g_bookmark_collection_create_db_table(const GBookmarkCollection *, sqlite3 *);
 
-/* Détermine si un élément est déjà présent ou non. */
-static GDbItem *g_bookmark_collection_has_key(GBookmarkCollection *, va_list);
-
 
 
 /* ---------------------------------------------------------------------------------- */
@@ -788,7 +785,6 @@ static void g_bookmark_collection_class_init(GBookmarkCollectionClass *klass)
     collec = G_DB_COLLECTION_CLASS(klass);
 
     collec->create_table = (collec_create_db_table_fc)g_bookmark_collection_create_db_table;
-    collec->has_key = (collec_has_key_fc)g_bookmark_collection_has_key;
 
 }
 
@@ -920,52 +916,3 @@ static bool g_bookmark_collection_create_db_table(const GBookmarkCollection *col
     return (ret == SQLITE_OK);
 
 }
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : collec = ensemble d'éléments à consulter.                    *
-*                ap     = 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   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static GDbItem *g_bookmark_collection_has_key(GBookmarkCollection *collec, va_list ap)
-{
-    GDbItem *result;                        /* Bilan à retourner           */
-    vmpa2t *ref;                            /* Adresse de référence        */
-    GList *items;                           /* Eléments déjà en place      */
-    GList *iter;                            /* Boucle de parcours          */
-    GDbBookmark *bm;                        /* Signet à consulter          */
-
-    result = NULL;
-
-    ref = va_arg(ap, vmpa2t *);
-
-#if 0
-    items = g_db_collection_get_items(G_DB_COLLECTION(collec));
-
-    for (iter = g_list_first(items); iter != NULL && result == NULL; iter = g_list_next(iter))
-    {
-        bm = G_DB_BOOKMARK(iter->data);
-
-        if (cmp_vmpa(&bm->addr, ref) != 0)
-
-            /**
-             * Un verrou est sensé être posé, donc il n'y a pas besoin
-             * de toucher au décompte des références car l'élément trouvé
-             * ne peut pas être supprimé.
-             */
-            result = G_DB_ITEM(bm);
-
-    }
-#endif
-
-    return result;
-
-}
diff --git a/src/analysis/db/items/comment.c b/src/analysis/db/items/comment.c
index 39aeb69..47ab5b3 100644
--- a/src/analysis/db/items/comment.c
+++ b/src/analysis/db/items/comment.c
@@ -183,9 +183,6 @@ static void g_comment_collection_finalize(GCommentCollection *);
 /* Crée la table des commentaires dans une base de données. */
 static bool g_comment_collection_create_db_table(const GCommentCollection *, sqlite3 *);
 
-/* Détermine si un élément est déjà présent ou non. */
-static GDbItem *g_comment_collection_has_key(GCommentCollection *, va_list);
-
 
 
 /* ---------------------------------------------------------------------------------- */
@@ -1511,7 +1508,6 @@ static void g_comment_collection_class_init(GCommentCollectionClass *klass)
     collec = G_DB_COLLECTION_CLASS(klass);
 
     collec->create_table = (collec_create_db_table_fc)g_comment_collection_create_db_table;
-    collec->has_key = (collec_has_key_fc)g_comment_collection_has_key;
 
 }
 
@@ -1646,52 +1642,3 @@ static bool g_comment_collection_create_db_table(const GCommentCollection *colle
     return (ret == SQLITE_OK);
 
 }
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : collec = ensemble d'éléments à consulter.                    *
-*                ap     = 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   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static GDbItem *g_comment_collection_has_key(GCommentCollection *collec, va_list ap)
-{
-    GDbItem *result;                        /* Bilan à retourner           */
-    vmpa2t *ref;                            /* Adresse de référence        */
-    GList *items;                           /* Eléments déjà en place      */
-    GList *iter;                            /* Boucle de parcours          */
-    GDbComment *bm;                        /* Signet à consulter          */
-
-    result = NULL;
-
-    ref = va_arg(ap, vmpa2t *);
-
-#if 0
-    items = g_db_collection_get_items(G_DB_COLLECTION(collec));
-
-    for (iter = g_list_first(items); iter != NULL && result == NULL; iter = g_list_next(iter))
-    {
-        bm = G_DB_COMMENT(iter->data);
-
-        if (cmp_vmpa(&bm->addr, ref) != 0)
-
-            /**
-             * Un verrou est sensé être posé, donc il n'y a pas besoin
-             * de toucher au décompte des références car l'élément trouvé
-             * ne peut pas être supprimé.
-             */
-            result = G_DB_ITEM(bm);
-
-    }
-#endif
-
-    return result;
-
-}
diff --git a/src/analysis/db/items/move.c b/src/analysis/db/items/move.c
index 3e347d3..842449a 100644
--- a/src/analysis/db/items/move.c
+++ b/src/analysis/db/items/move.c
@@ -136,9 +136,6 @@ static void g_move_collection_finalize(GMoveCollection *);
 /* Crée la table des basculements dans une base de données. */
 static bool g_move_collection_create_db_table(const GMoveCollection *, sqlite3 *);
 
-/* Détermine si un élément est déjà présent ou non. */
-static GDbItem *g_move_collection_has_key(GMoveCollection *, va_list);
-
 
 
 /* ---------------------------------------------------------------------------------- */
@@ -631,7 +628,6 @@ static void g_move_collection_class_init(GMoveCollectionClass *klass)
     collec = G_DB_COLLECTION_CLASS(klass);
 
     collec->create_table = (collec_create_db_table_fc)g_move_collection_create_db_table;
-    collec->has_key = (collec_has_key_fc)g_move_collection_has_key;
 
 }
 
@@ -766,52 +762,3 @@ static bool g_move_collection_create_db_table(const GMoveCollection *collec, sql
     return (ret == SQLITE_OK);
 
 }
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : collec = ensemble d'éléments à consulter.                    *
-*                ap     = 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   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static GDbItem *g_move_collection_has_key(GMoveCollection *collec, va_list ap)
-{
-    GDbItem *result;                        /* Bilan à retourner           */
-    const GLineCursor *ref;                 /* Emplacement de référence    */
-    GList *items;                           /* Eléments déjà en place      */
-    GList *iter;                            /* Boucle de parcours          */
-    GDbMove *bm;                            /* Signet à consulter          */
-
-    result = NULL;
-
-    ref = va_arg(ap, const GLineCursor *);
-
-#if 0
-    items = g_db_collection_get_items(G_DB_COLLECTION(collec));
-
-    for (iter = g_list_first(items); iter != NULL && result == NULL; iter = g_list_next(iter))
-    {
-        bm = G_DB_MOVE(iter->data);
-
-        if (g_line_cursor_compare(bm->src, ref) == 0)
-
-            /**
-             * Un verrou est sensé être posé, donc il n'y a pas besoin
-             * de toucher au décompte des références car l'élément trouvé
-             * ne peut pas être supprimé.
-             */
-            result = G_DB_ITEM(bm);
-
-    }
-#endif
-
-    return result;
-
-}
diff --git a/src/analysis/db/items/switcher.c b/src/analysis/db/items/switcher.c
index 2a3aa42..e9305d8 100644
--- a/src/analysis/db/items/switcher.c
+++ b/src/analysis/db/items/switcher.c
@@ -136,9 +136,6 @@ static void g_switcher_collection_finalize(GSwitcherCollection *);
 /* Crée la table des basculements dans une base de données. */
 static bool g_switcher_collection_create_db_table(const GSwitcherCollection *, sqlite3 *);
 
-/* Détermine si un élément est déjà présent ou non. */
-static GDbItem *g_switcher_collection_has_key(GSwitcherCollection *, va_list);
-
 
 
 /* ---------------------------------------------------------------------------------- */
@@ -783,7 +780,6 @@ static void g_switcher_collection_class_init(GSwitcherCollectionClass *klass)
     collec = G_DB_COLLECTION_CLASS(klass);
 
     collec->create_table = (collec_create_db_table_fc)g_switcher_collection_create_db_table;
-    collec->has_key = (collec_has_key_fc)g_switcher_collection_has_key;
 
 }
 
@@ -916,52 +912,3 @@ static bool g_switcher_collection_create_db_table(const GSwitcherCollection *col
     return (ret == SQLITE_OK);
 
 }
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : collec = ensemble d'éléments à consulter.                    *
-*                ap     = 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   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static GDbItem *g_switcher_collection_has_key(GSwitcherCollection *collec, va_list ap)
-{
-    GDbItem *result;                        /* Bilan à retourner           */
-    vmpa2t *ref;                            /* Adresse de référence        */
-    GList *items;                           /* Eléments déjà en place      */
-    GList *iter;                            /* Boucle de parcours          */
-    GDbSwitcher *bm;                        /* Signet à consulter          */
-
-    result = NULL;
-
-    ref = va_arg(ap, vmpa2t *);
-
-#if 0
-    items = g_db_collection_get_items(G_DB_COLLECTION(collec));
-
-    for (iter = g_list_first(items); iter != NULL && result == NULL; iter = g_list_next(iter))
-    {
-        bm = G_DB_SWITCHER(iter->data);
-
-        if (cmp_vmpa(&bm->addr, ref) != 0)
-
-            /**
-             * Un verrou est sensé être posé, donc il n'y a pas besoin
-             * de toucher au décompte des références car l'élément trouvé
-             * ne peut pas être supprimé.
-             */
-            result = G_DB_ITEM(bm);
-
-    }
-#endif
-
-    return result;
-
-}
diff --git a/src/gui/menus/edition.c b/src/gui/menus/edition.c
index 92596ca..d3381bf 100644
--- a/src/gui/menus/edition.c
+++ b/src/gui/menus/edition.c
@@ -736,29 +736,8 @@ static void mcb_edition_bookmarks_toggle(GtkMenuItem *menuitem, GMenuBar *bar)
         {
             bookmark = get_item_from_bookmark_dialog(builder, &addr);
 
-            g_db_collection_wlock(G_DB_COLLECTION(collec));
-
-            if (g_db_collection_has_item(collec, G_DB_ITEM(bookmark)))
-            {
-                ret = qck_show_question(GTK_WINDOW(ref),
-                                        _("Location  already bookmarked!"),
-                                        _("A bookmark has been defined at the same location.\n" \
-                                          "Do you want to replace it ?"));
-
-                if (ret != GTK_RESPONSE_YES)
-                {
-                    g_object_unref(G_OBJECT(bookmark));
-                    goto mcb_ebt_add_finish;
-                }
-
-            }
-
             g_loaded_binary_add_to_collection(binary, G_DB_ITEM(bookmark));
 
-        mcb_ebt_add_finish:
-
-            g_db_collection_wunlock(G_DB_COLLECTION(collec));
-
         }
 
         gtk_widget_destroy(dialog);
-- 
cgit v0.11.2-87-g4458