diff options
-rw-r--r-- | src/analysis/db/collection-int.h | 4 | ||||
-rw-r--r-- | src/analysis/db/collection.c | 133 | ||||
-rw-r--r-- | src/analysis/db/collection.h | 6 | ||||
-rw-r--r-- | src/analysis/db/items/bookmark.c | 53 | ||||
-rw-r--r-- | src/analysis/db/items/comment.c | 53 | ||||
-rw-r--r-- | src/analysis/db/items/move.c | 53 | ||||
-rw-r--r-- | src/analysis/db/items/switcher.c | 53 | ||||
-rw-r--r-- | 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); |