summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-05-09 11:56:15 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-05-09 11:56:15 (GMT)
commitbb242c2cda6a590fef652e62688c10e2d52a7ff0 (patch)
tree8d59ef7d6edc7887806906ac65938510c52c9a5b /src/analysis
parent286878b36b5cf7a3f44251f62c94a57f0f29d3cf (diff)
Simplified the content loading handling.
Diffstat (limited to 'src/analysis')
-rw-r--r--src/analysis/loading.c244
-rw-r--r--src/analysis/loading.h19
-rw-r--r--src/analysis/project.c93
3 files changed, 127 insertions, 229 deletions
diff --git a/src/analysis/loading.c b/src/analysis/loading.c
index f2ae882..5e0f651 100644
--- a/src/analysis/loading.c
+++ b/src/analysis/loading.c
@@ -30,6 +30,7 @@
#include "../core/global.h"
+#include "../glibext/chrysamarshal.h"
#include "../glibext/delayed-int.h"
#include "../plugins/pglist.h"
@@ -51,7 +52,7 @@ typedef struct _GExploringWork
{
GDelayedWork parent; /* A laisser en premier */
- const gid_t *gid; /* Groupe d'appartenance */
+ const wgroup_id_t *wid; /* Groupe d'appartenance */
GBinContent *content; /* Contenu brut à disposition */
@@ -84,10 +85,10 @@ static void g_exploring_work_finalize(GExploringWork *);
static GExploringWork *g_exploring_work_new(GBinContent *);
/* Fournit l'identifiant du groupe de rattachement de la tâche. */
-static gid_t g_exploring_work_get_group_id(const GExploringWork *);
+static wgroup_id_t g_exploring_work_get_group_id(const GExploringWork *);
/* Définit l'identifiant du groupe de rattachement de la tâche. */
-static void g_exploring_work_set_group_id(GExploringWork *, const gid_t *);
+static void g_exploring_work_set_group_id(GExploringWork *, const wgroup_id_t *);
/* Réalise l'exploration effective de formes de contenus. */
static void g_exploring_work_process(GExploringWork *, GtkStatusStack *);
@@ -102,8 +103,7 @@ typedef struct _exploring_group
{
GBinContent *original; /* Contenu binaire initial */
- wgroup_id_t wid; /* Groupe de travail */
- gid_t gid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
GBinContent **contents; /* Contenus reconnus dispos. */
size_t count; /* Taille de cette liste */
@@ -115,8 +115,6 @@ struct _GContentExplorer
{
GObject parent; /* A laisser en premier */
- gid_t generator; /* Générateur d'identifiants */
-
exploring_group *groups; /* Rassemblement de chargements*/
size_t count; /* Nombre de ces groupes */
GMutex mutex; /* Accès protégé à la liste */
@@ -130,7 +128,7 @@ struct _GContentExplorerClass
/* Signaux */
- void (* explored) (GContentExplorer *, gid_t);
+ void (* explored) (GContentExplorer *, wgroup_id_t);
};
@@ -148,7 +146,7 @@ static void g_content_explorer_dispose(GContentExplorer *);
static void g_content_explorer_finalize(GContentExplorer *);
/* Retrouve le groupe correspondant à un identifiant donné. */
-static exploring_group *g_content_explorer_find_group(GContentExplorer *, gid_t);
+static exploring_group *g_content_explorer_find_group(GContentExplorer *, wgroup_id_t);
/* Note la fin d'une phase d'exploration de contenu. */
static void g_content_explorer_ack(GContentExplorer *, GExploringWork *);
@@ -171,7 +169,7 @@ typedef struct _GResolvingWork
{
GDelayedWork parent; /* A laisser en premier */
- const gid_t *gid; /* Groupe d'appartenance */
+ const wgroup_id_t *wid; /* Groupe d'appartenance */
GBinContent *content; /* Contenu brut à disposition */
@@ -204,10 +202,10 @@ static void g_resolving_work_finalize(GResolvingWork *);
static GResolvingWork *g_resolving_work_new(GBinContent *);
/* Fournit l'identifiant du groupe de rattachement de la tâche. */
-static gid_t g_resolving_work_get_group_id(const GResolvingWork *);
+static wgroup_id_t g_resolving_work_get_group_id(const GResolvingWork *);
/* Définit l'identifiant du groupe de rattachement de la tâche. */
-static void g_resolving_work_set_group_id(GResolvingWork *, const gid_t *);
+static void g_resolving_work_set_group_id(GResolvingWork *, const wgroup_id_t *);
/* Réalise la conversion effective de formes de contenus. */
static void g_resolving_work_process(GResolvingWork *, GtkStatusStack *);
@@ -222,7 +220,7 @@ typedef struct _resolving_group
{
size_t remaining; /* Nombre de tâches restantes */
- const gid_t *gid; /* Groupe d'appartenance */
+ const wgroup_id_t *wid; /* Groupe d'appartenance */
GLoadedContent **loaded; /* Contenus reconnus à intégrer*/
size_t count; /* Taille de cette liste */
@@ -247,7 +245,7 @@ struct _GContentResolverClass
/* Signaux */
- void (* resolved) (GContentResolver *, gid_t);
+ void (* resolved) (GContentResolver *, wgroup_id_t);
};
@@ -265,7 +263,7 @@ static void g_content_resolver_dispose(GContentResolver *);
static void g_content_resolver_finalize(GContentResolver *);
/* Retrouve le groupe correspondant à un identifiant donné. */
-static resolving_group *g_content_resolver_find_group(GContentResolver *, gid_t);
+static resolving_group *g_content_resolver_find_group(GContentResolver *, wgroup_id_t);
/* Note la fin d'une phase de resolution de contenu. */
static void g_content_resolver_ack(GContentResolver *, GResolvingWork *);
@@ -324,7 +322,7 @@ static void g_exploring_work_class_init(GExploringWorkClass *klass)
static void g_exploring_work_init(GExploringWork *work)
{
- work->gid = NULL;
+ work->wid = NULL;
work->content = NULL;
@@ -409,13 +407,13 @@ static GExploringWork *g_exploring_work_new(GBinContent *content)
* *
******************************************************************************/
-static gid_t g_exploring_work_get_group_id(const GExploringWork *work)
+static wgroup_id_t g_exploring_work_get_group_id(const GExploringWork *work)
{
- gid_t result; /* Identifiant à retourner */
+ wgroup_id_t result; /* Identifiant à retourner */
- assert(work->gid != NULL);
+ assert(work->wid != NULL);
- result = *work->gid;
+ result = *work->wid;
return result;
@@ -425,7 +423,7 @@ static gid_t g_exploring_work_get_group_id(const GExploringWork *work)
/******************************************************************************
* *
* Paramètres : work = instance à compléter. *
-* gid = identifiant d'un même ensemble d'explorations. *
+* wid = identifiant d'un même ensemble d'explorations. *
* *
* Description : Définit l'identifiant du groupe de rattachement de la tâche. *
* *
@@ -435,9 +433,9 @@ static gid_t g_exploring_work_get_group_id(const GExploringWork *work)
* *
******************************************************************************/
-static void g_exploring_work_set_group_id(GExploringWork *work, const gid_t *gid)
+static void g_exploring_work_set_group_id(GExploringWork *work, const wgroup_id_t *wid)
{
- work->gid = gid;
+ work->wid = wid;
}
@@ -457,11 +455,11 @@ static void g_exploring_work_set_group_id(GExploringWork *work, const gid_t *gid
static void g_exploring_work_process(GExploringWork *work, GtkStatusStack *status)
{
- gid_t gid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
- gid = g_exploring_work_get_group_id(work);
+ wid = g_exploring_work_get_group_id(work);
- handle_binary_content(PGA_CONTENT_EXPLORER, work->content, gid, status);
+ handle_binary_content(PGA_CONTENT_EXPLORER, work->content, wid, status);
}
@@ -502,8 +500,8 @@ static void g_content_explorer_class_init(GContentExplorerClass *klass)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GContentExplorerClass, explored),
NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
+ g_cclosure_user_marshal_VOID__UINT64,
+ G_TYPE_NONE, 1, G_TYPE_UINT64);
}
@@ -522,8 +520,6 @@ static void g_content_explorer_class_init(GContentExplorerClass *klass)
static void g_content_explorer_init(GContentExplorer *explorer)
{
- explorer->generator = 0;
-
explorer->groups = NULL;
explorer->count = 0;
@@ -547,7 +543,7 @@ static void g_content_explorer_init(GContentExplorer *explorer)
static void g_content_explorer_dispose(GContentExplorer *explorer)
{
while (explorer->count > 0)
- g_content_explorer_delete_group(explorer, explorer->groups[0].gid);
+ g_content_explorer_delete_group(explorer, explorer->groups[0].wid);
if (explorer->groups != NULL)
free(explorer->groups);
@@ -604,7 +600,7 @@ GContentExplorer *g_content_explorer_new(void)
/******************************************************************************
* *
* Paramètres : explorer = gestionnaire d'explorations à consulter. *
-* gid = identifiant du groupe recherché. *
+* wid = identifiant du groupe recherché. *
* *
* Description : Retrouve le groupe correspondant à un identifiant donné. *
* *
@@ -614,7 +610,7 @@ GContentExplorer *g_content_explorer_new(void)
* *
******************************************************************************/
-static exploring_group *g_content_explorer_find_group(GContentExplorer *explorer, gid_t gid)
+static exploring_group *g_content_explorer_find_group(GContentExplorer *explorer, wgroup_id_t wid)
{
exploring_group *result; /* Trouvaille à retourner */
size_t i; /* Boucle de parcours */
@@ -624,7 +620,7 @@ static exploring_group *g_content_explorer_find_group(GContentExplorer *explorer
result = NULL;
for (i = 0; i < explorer->count && result == NULL; i++)
- if (explorer->groups[i].gid == gid)
+ if (explorer->groups[i].wid == wid)
result = &explorer->groups[i];
return result;
@@ -647,16 +643,16 @@ static exploring_group *g_content_explorer_find_group(GContentExplorer *explorer
static void g_content_explorer_ack(GContentExplorer *explorer, GExploringWork *work)
{
- gid_t gid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
exploring_group *group; /* Groupe d'opération concerné */
GWorkQueue *queue; /* Gestionnaire de différés */
bool empty; /* Fin de l'exploration ? */
- gid = g_exploring_work_get_group_id(work);
+ wid = g_exploring_work_get_group_id(work);
g_mutex_lock(&explorer->mutex);
- group = g_content_explorer_find_group(explorer, gid);
+ group = g_content_explorer_find_group(explorer, wid);
assert(group != NULL);
queue = get_work_queue();
@@ -666,7 +662,7 @@ static void g_content_explorer_ack(GContentExplorer *explorer, GExploringWork *w
g_mutex_unlock(&explorer->mutex);
if (empty)
- g_signal_emit_by_name(explorer, "explored", gid);
+ g_signal_emit_by_name(explorer, "explored", wid);
}
@@ -684,47 +680,26 @@ static void g_content_explorer_ack(GContentExplorer *explorer, GExploringWork *w
* *
******************************************************************************/
-const gid_t *g_content_explorer_create_group(GContentExplorer *explorer, GBinContent *content)
+const wgroup_id_t *g_content_explorer_create_group(GContentExplorer *explorer, GBinContent *content)
{
- const gid_t *result; /* Identifiant à retourner */
- gid_t loop; /* Détection de boucle */
- gid_t id; /* Nouvelle identifiant généré */
- exploring_group *group; /* Groupe ciblé par l'opération*/
+ const wgroup_id_t *result; /* Identifiant à retourner */
GWorkQueue *queue; /* Gestionnaire de différés */
+ wgroup_id_t new; /* Nouvel identifiant */
+ exploring_group *group; /* Groupe ciblé par l'opération*/
GExploringWork *work; /* Nouvelle vague d'exploration*/
g_mutex_lock(&explorer->mutex);
/* Récupération d'un identifiant libre */
- /**
- * Note :
- *
- * Comme 0 est l'identifiant du groupe de travail par défaut (DEFAULT_WORK_GROUP)
- * et qu'il n'est pas possible de bloquer ce groupe lors des appels à
- * g_work_queue_is_empty(), on différencie les identifiants de groupes
- * de contenus et les identifiants de groupes de travail.
- */
-
- loop = explorer->generator;
-
- do
- {
- id = ++explorer->generator;
-
- /* Verification de la satisfaisabilité de la création */
-
- assert(id != loop);
-
- /* Vérification que la place est libre... */
-
- group = g_content_explorer_find_group(explorer, id);
+ queue = get_work_queue();
- if (group == NULL)
- break;
+ new = g_work_queue_define_work_group(queue);
- }
- while (1);
+#ifndef NDEBUG
+ group = g_content_explorer_find_group(explorer, new);
+ assert(group == NULL);
+#endif
/* Mise en place du groupe */
@@ -735,12 +710,9 @@ const gid_t *g_content_explorer_create_group(GContentExplorer *explorer, GBinCon
group->original = content;
g_object_ref(G_OBJECT(content));
- queue = get_work_queue();
-
- group->wid = g_work_queue_define_work_group(queue);
- group->gid = id;
+ group->wid = new;
- result = &group->gid;
+ result = &group->wid;
group->contents = NULL;
group->count = 0;
@@ -748,7 +720,7 @@ const gid_t *g_content_explorer_create_group(GContentExplorer *explorer, GBinCon
/* Alimentation du contenu initial */
work = g_exploring_work_new(content);
- g_exploring_work_set_group_id(work, &group->gid);
+ g_exploring_work_set_group_id(work, &group->wid);
g_signal_connect_swapped(work, "work-completed", G_CALLBACK(g_content_explorer_ack), explorer);
@@ -764,39 +736,7 @@ const gid_t *g_content_explorer_create_group(GContentExplorer *explorer, GBinCon
/******************************************************************************
* *
* Paramètres : explorer = gestionnaire d'explorations à manipuler. *
-* gid = identifiant du groupe à consulter. *
-* *
-* Description : Fournit l'identifiant attribué pour les tâches parallèles. *
-* *
-* Retour : Identifiant des tâches liées au groupe. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-const wgroup_id_t *g_content_explorer_get_group_work_id(GContentExplorer *explorer, gid_t gid)
-{
- const wgroup_id_t *result; /* Identifiant à retourner */
- exploring_group *group; /* Groupe d'opération concerné */
-
- g_mutex_lock(&explorer->mutex);
-
- group = g_content_explorer_find_group(explorer, gid);
- assert(group != NULL);
-
- result = &group->wid;
-
- g_mutex_unlock(&explorer->mutex);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : explorer = gestionnaire d'explorations à manipuler. *
-* gid = identifiant du groupe à supprimer. *
+* wid = identifiant du groupe à supprimer. *
* *
* Description : Termine une vague d'exploration de contenu. *
* *
@@ -806,11 +746,8 @@ const wgroup_id_t *g_content_explorer_get_group_work_id(GContentExplorer *explor
* *
******************************************************************************/
-void g_content_explorer_delete_group(GContentExplorer *explorer, gid_t gid)
+void g_content_explorer_delete_group(GContentExplorer *explorer, wgroup_id_t wid)
{
-
-
-
exploring_group *group; /* Groupe ciblé par l'opération*/
GWorkQueue *queue; /* Gestionnaire de différés */
size_t i; /* Boucle de parcours */
@@ -818,7 +755,7 @@ void g_content_explorer_delete_group(GContentExplorer *explorer, gid_t gid)
g_mutex_lock(&explorer->mutex);
- group = g_content_explorer_find_group(explorer, gid);
+ group = g_content_explorer_find_group(explorer, wid);
/* Supression des contenus chargés */
@@ -850,7 +787,7 @@ void g_content_explorer_delete_group(GContentExplorer *explorer, gid_t gid)
/******************************************************************************
* *
* Paramètres : explorer = gestionnaire d'explorations à consulter. *
-* gid = identifiant du groupe à parcourir. *
+* wid = identifiant du groupe à parcourir. *
* content = nouveau contenu à intégrer. *
* *
* Description : Ajoute un nouveau contenu découvert au crédit d'un groupe. *
@@ -861,7 +798,7 @@ void g_content_explorer_delete_group(GContentExplorer *explorer, gid_t gid)
* *
******************************************************************************/
-void g_content_explorer_populate_group(GContentExplorer *explorer, gid_t gid, GBinContent *content)
+void g_content_explorer_populate_group(GContentExplorer *explorer, wgroup_id_t wid, GBinContent *content)
{
exploring_group *group; /* Groupe d'opération concerné */
GWorkQueue *queue; /* Gestionnaire de différés */
@@ -869,7 +806,7 @@ void g_content_explorer_populate_group(GContentExplorer *explorer, gid_t gid, GB
g_mutex_lock(&explorer->mutex);
- group = g_content_explorer_find_group(explorer, gid);
+ group = g_content_explorer_find_group(explorer, wid);
assert(group != NULL);
/* Conservation du résultat */
@@ -881,7 +818,7 @@ void g_content_explorer_populate_group(GContentExplorer *explorer, gid_t gid, GB
/* Relancement des explorations */
work = g_exploring_work_new(content);
- g_exploring_work_set_group_id(work, &group->gid);
+ g_exploring_work_set_group_id(work, &group->wid);
g_signal_connect_swapped(work, "work-completed", G_CALLBACK(g_content_explorer_ack), explorer);
@@ -897,7 +834,7 @@ void g_content_explorer_populate_group(GContentExplorer *explorer, gid_t gid, GB
/******************************************************************************
* *
* Paramètres : explorer = gestionnaire d'explorations à consulter. *
-* gid = identifiant du groupe à parcourir. *
+* wid = identifiant du groupe à parcourir. *
* count = nombre de contenus binaires retournés. [OUT] *
* *
* Description : Fournit la liste de tous les contenus disponibles. *
@@ -908,7 +845,7 @@ void g_content_explorer_populate_group(GContentExplorer *explorer, gid_t gid, GB
* *
******************************************************************************/
-GBinContent **g_content_explorer_get_all(GContentExplorer *explorer, gid_t gid, size_t *count)
+GBinContent **g_content_explorer_get_all(GContentExplorer *explorer, wgroup_id_t wid, size_t *count)
{
GBinContent **result; /* Trouvailles à retourner */
exploring_group *group; /* Groupe d'opération concerné */
@@ -916,7 +853,7 @@ GBinContent **g_content_explorer_get_all(GContentExplorer *explorer, gid_t gid,
g_mutex_lock(&explorer->mutex);
- group = g_content_explorer_find_group(explorer, gid);
+ group = g_content_explorer_find_group(explorer, wid);
assert(group != NULL);
/* Allocation de la liste finale */
@@ -1000,7 +937,7 @@ static void g_resolving_work_class_init(GResolvingWorkClass *klass)
static void g_resolving_work_init(GResolvingWork *work)
{
- work->gid = NULL;
+ work->wid = NULL;
work->content = NULL;
@@ -1085,13 +1022,13 @@ static GResolvingWork *g_resolving_work_new(GBinContent *content)
* *
******************************************************************************/
-static gid_t g_resolving_work_get_group_id(const GResolvingWork *work)
+static wgroup_id_t g_resolving_work_get_group_id(const GResolvingWork *work)
{
- gid_t result; /* Identifiant à retourner */
+ wgroup_id_t result; /* Identifiant à retourner */
- assert(work->gid != NULL);
+ assert(work->wid != NULL);
- result = *work->gid;
+ result = *work->wid;
return result;
@@ -1101,7 +1038,7 @@ static gid_t g_resolving_work_get_group_id(const GResolvingWork *work)
/******************************************************************************
* *
* Paramètres : work = instance à compléter. *
-* gid = identifiant d'un même ensemble de conversions. *
+* wid = identifiant d'un même ensemble de conversions. *
* *
* Description : Définit l'identifiant du groupe de rattachement de la tâche. *
* *
@@ -1111,9 +1048,9 @@ static gid_t g_resolving_work_get_group_id(const GResolvingWork *work)
* *
******************************************************************************/
-static void g_resolving_work_set_group_id(GResolvingWork *work, const gid_t *gid)
+static void g_resolving_work_set_group_id(GResolvingWork *work, const wgroup_id_t *wid)
{
- work->gid = gid;
+ work->wid = wid;
}
@@ -1133,11 +1070,11 @@ static void g_resolving_work_set_group_id(GResolvingWork *work, const gid_t *gid
static void g_resolving_work_process(GResolvingWork *work, GtkStatusStack *status)
{
- gid_t gid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
- gid = g_resolving_work_get_group_id(work);
+ wid = g_resolving_work_get_group_id(work);
- handle_binary_content(PGA_CONTENT_RESOLVER, work->content, gid, status);
+ handle_binary_content(PGA_CONTENT_RESOLVER, work->content, wid, status);
}
@@ -1178,8 +1115,8 @@ static void g_content_resolver_class_init(GContentResolverClass *klass)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GContentResolverClass, resolved),
NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
+ g_cclosure_user_marshal_VOID__UINT64,
+ G_TYPE_NONE, 1, G_TYPE_UINT64);
}
@@ -1217,7 +1154,7 @@ static void g_content_resolver_init(GContentResolver *resolver)
static void g_content_resolver_dispose(GContentResolver *resolver)
{
while (resolver->count > 0)
- g_content_resolver_delete_group(resolver, *resolver->groups[0].gid);
+ g_content_resolver_delete_group(resolver, *resolver->groups[0].wid);
if (resolver->groups != NULL)
free(resolver->groups);
@@ -1274,7 +1211,7 @@ GContentResolver *g_content_resolver_new(void)
/******************************************************************************
* *
* Paramètres : resolver = gestionnaire de résolutions à consulter. *
-* gid = identifiant du groupe recherché. *
+* wid = identifiant du groupe recherché. *
* *
* Description : Retrouve le groupe correspondant à un identifiant donné. *
* *
@@ -1284,7 +1221,7 @@ GContentResolver *g_content_resolver_new(void)
* *
******************************************************************************/
-static resolving_group *g_content_resolver_find_group(GContentResolver *resolver, gid_t gid)
+static resolving_group *g_content_resolver_find_group(GContentResolver *resolver, wgroup_id_t wid)
{
resolving_group *result; /* Trouvaille à retourner */
size_t i; /* Boucle de parcours */
@@ -1294,7 +1231,7 @@ static resolving_group *g_content_resolver_find_group(GContentResolver *resolver
result = NULL;
for (i = 0; i < resolver->count && result == NULL; i++)
- if (*resolver->groups[i].gid == gid)
+ if (*resolver->groups[i].wid == wid)
result = &resolver->groups[i];
return result;
@@ -1317,15 +1254,15 @@ static resolving_group *g_content_resolver_find_group(GContentResolver *resolver
static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *work)
{
- gid_t gid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
resolving_group *group; /* Groupe d'opération concerné */
bool empty; /* Fin de l'resolvation ? */
- gid = g_resolving_work_get_group_id(work);
+ wid = g_resolving_work_get_group_id(work);
g_mutex_lock(&resolver->mutex);
- group = g_content_resolver_find_group(resolver, gid);
+ group = g_content_resolver_find_group(resolver, wid);
assert(group != NULL);
assert(group->remaining > 0);
@@ -1335,7 +1272,7 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w
g_mutex_unlock(&resolver->mutex);
if (empty)
- g_signal_emit_by_name(resolver, "resolved", gid);
+ g_signal_emit_by_name(resolver, "resolved", wid);
}
@@ -1344,7 +1281,6 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w
* *
* Paramètres : resolver = gestionnaire de résolutions à manipuler. *
* wid = identifiant du groupe de tâches réservé. *
-* gid = identifiant unique généré en amont. *
* contents = contenus à analyser. *
* count = nombre de ces contenus. *
* *
@@ -1356,7 +1292,7 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w
* *
******************************************************************************/
-void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id_t *wid, const gid_t *gid, GBinContent **contents, size_t count)
+void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id_t *wid, GBinContent **contents, size_t count)
{
resolving_group *group; /* Groupe ciblé par l'opération*/
GWorkQueue *queue; /* Gestionnaire de différés */
@@ -1373,7 +1309,7 @@ void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id
group->remaining = count;
- group->gid = gid;
+ group->wid = wid;
group->loaded = NULL;
group->count = 0;
@@ -1385,7 +1321,7 @@ void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id
for (i = 0; i < count; i++)
{
work = g_resolving_work_new(contents[i]);
- g_resolving_work_set_group_id(work, gid);
+ g_resolving_work_set_group_id(work, wid);
g_signal_connect_swapped(work, "work-completed", G_CALLBACK(g_content_resolver_ack), resolver);
@@ -1401,7 +1337,7 @@ void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id
/******************************************************************************
* *
* Paramètres : resolver = gestionnaire d'explorations à manipuler. *
-* gid = identifiant du groupe à supprimer. *
+* wid = identifiant du groupe à supprimer. *
* *
* Description : Termine une vague de résolution de contenu. *
* *
@@ -1411,7 +1347,7 @@ void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id
* *
******************************************************************************/
-void g_content_resolver_delete_group(GContentResolver *resolver, gid_t gid)
+void g_content_resolver_delete_group(GContentResolver *resolver, wgroup_id_t wid)
{
resolving_group *group; /* Groupe ciblé par l'opération*/
size_t i; /* Boucle de parcours */
@@ -1419,7 +1355,7 @@ void g_content_resolver_delete_group(GContentResolver *resolver, gid_t gid)
g_mutex_lock(&resolver->mutex);
- group = g_content_resolver_find_group(resolver, gid);
+ group = g_content_resolver_find_group(resolver, wid);
/* Supression des contenus chargés */
@@ -1447,7 +1383,7 @@ void g_content_resolver_delete_group(GContentResolver *resolver, gid_t gid)
/******************************************************************************
* *
* Paramètres : resolver = gestionnaire de résolutions à consulter. *
-* gid = identifiant du groupe recherché. *
+* wid = identifiant du groupe recherché. *
* loaded = contenu chargé et pouvant être représenté. *
* *
* Description : Intègre un contenu chargé dans les résultats. *
@@ -1458,13 +1394,13 @@ void g_content_resolver_delete_group(GContentResolver *resolver, gid_t gid)
* *
******************************************************************************/
-void g_content_resolver_add_detected(GContentResolver *resolver, gid_t gid, GLoadedContent *loaded)
+void g_content_resolver_add_detected(GContentResolver *resolver, wgroup_id_t wid, GLoadedContent *loaded)
{
resolving_group *group; /* Groupe ciblé par l'opération*/
g_mutex_lock(&resolver->mutex);
- group = g_content_resolver_find_group(resolver, gid);
+ group = g_content_resolver_find_group(resolver, wid);
group->loaded = (GLoadedContent **)realloc(group->loaded, ++group->count * sizeof(GLoadedContent *));
@@ -1478,7 +1414,7 @@ void g_content_resolver_add_detected(GContentResolver *resolver, gid_t gid, GLoa
/******************************************************************************
* *
* Paramètres : resolver = gestionnaire de resolutions à consulter. *
-* gid = identifiant du groupe à parcourir. *
+* wid = identifiant du groupe à parcourir. *
* count = nombre de contenus binaires retournés. [OUT] *
* *
* Description : Fournit la liste de tous les contenus chargés valables. *
@@ -1489,7 +1425,7 @@ void g_content_resolver_add_detected(GContentResolver *resolver, gid_t gid, GLoa
* *
******************************************************************************/
-GLoadedContent **g_content_resolver_get_all(GContentResolver *resolver, gid_t gid, size_t *count)
+GLoadedContent **g_content_resolver_get_all(GContentResolver *resolver, wgroup_id_t wid, size_t *count)
{
GLoadedContent **result; /* Trouvailles à retourner */
resolving_group *group; /* Groupe d'opération concerné */
@@ -1497,7 +1433,7 @@ GLoadedContent **g_content_resolver_get_all(GContentResolver *resolver, gid_t gi
g_mutex_lock(&resolver->mutex);
- group = g_content_resolver_find_group(resolver, gid);
+ group = g_content_resolver_find_group(resolver, wid);
assert(group != NULL);
/* Allocation de la liste finale */
diff --git a/src/analysis/loading.h b/src/analysis/loading.h
index 4755226..19cd12d 100644
--- a/src/analysis/loading.h
+++ b/src/analysis/loading.h
@@ -59,19 +59,16 @@ GType g_content_explorer_get_type(void);
GContentExplorer *g_content_explorer_new(void);
/* Initie une nouvelle vague d'exploration de contenu. */
-const gid_t *g_content_explorer_create_group(GContentExplorer *, GBinContent *);
-
-/* Fournit l'identifiant attribué pour les tâches parallèles. */
-const wgroup_id_t *g_content_explorer_get_group_work_id(GContentExplorer *, gid_t);
+const wgroup_id_t *g_content_explorer_create_group(GContentExplorer *, GBinContent *);
/* Termine une vague d'exploration de contenu. */
-void g_content_explorer_delete_group(GContentExplorer *, gid_t);
+void g_content_explorer_delete_group(GContentExplorer *, wgroup_id_t);
/* Ajoute un nouveau contenu découvert au crédit d'un groupe. */
-void g_content_explorer_populate_group(GContentExplorer *, gid_t, GBinContent *);
+void g_content_explorer_populate_group(GContentExplorer *, wgroup_id_t, GBinContent *);
/* Fournit la liste de tous les contenus disponibles. */
-GBinContent **g_content_explorer_get_all(GContentExplorer *, gid_t, size_t *);
+GBinContent **g_content_explorer_get_all(GContentExplorer *, wgroup_id_t, size_t *);
@@ -100,16 +97,16 @@ GType g_content_resolver_get_type(void);
GContentResolver *g_content_resolver_new(void);
/* Initie une nouvelle vague de résolution de contenus. */
-void g_content_resolver_create_group(GContentResolver *, const wgroup_id_t *, const gid_t *, GBinContent **, size_t);
+void g_content_resolver_create_group(GContentResolver *, const wgroup_id_t *, GBinContent **, size_t);
/* Termine une vague de résolution de contenu. */
-void g_content_resolver_delete_group(GContentResolver *, gid_t);
+void g_content_resolver_delete_group(GContentResolver *, wgroup_id_t);
/* Intègre un contenu chargé dans les résultats. */
-void g_content_resolver_add_detected(GContentResolver *, gid_t, GLoadedContent *);
+void g_content_resolver_add_detected(GContentResolver *, wgroup_id_t, GLoadedContent *);
/* Fournit la liste de tous les contenus chargés valables. */
-GLoadedContent **g_content_resolver_get_all(GContentResolver *, gid_t, size_t *);
+GLoadedContent **g_content_resolver_get_all(GContentResolver *, wgroup_id_t, size_t *);
diff --git a/src/analysis/project.c b/src/analysis/project.c
index b4108ff..d2228e2 100644
--- a/src/analysis/project.c
+++ b/src/analysis/project.c
@@ -46,11 +46,7 @@
/* Suivi du chargement de contenus binaires */
typedef struct _loading_params
{
- union
- {
- const gid_t *exp_gid; /* Identifiant d'exploration */
- const gid_t **exp_gids; /* Identifiants d'exploration */
- };
+ const wgroup_id_t **exp_wids; /* Identifiants d'exploration */
size_t exp_count; /* Quantitié d'identifiants */
size_t resolved; /* Compteur de résolutions */
@@ -115,16 +111,16 @@ static loading_params *g_study_project_prepare_content_loading(GStudyProject *);
static void g_study_project_destroy_content_loading(GStudyProject *, loading_params *);
/* Retrouve les infos de chargements liées à une exploration. */
-static loading_params *g_study_project_find_exploration(GStudyProject *, gid_t, const gid_t **);
+static loading_params *g_study_project_find_exploration(GStudyProject *, wgroup_id_t, const wgroup_id_t **);
/* Assure l'intégration de contenus listés dans du XML. */
static void g_study_project_recover_binary_contents(GStudyProject *, xmlDoc *, xmlXPathContext *);
/* Note la fin d'une phase d'exploration de contenu. */
-static void on_new_content_explored(GContentExplorer *, gid_t, GStudyProject *);
+static void on_new_content_explored(GContentExplorer *, wgroup_id_t, GStudyProject *);
/* Note la fin d'une phase de resolution de contenu. */
-static void on_new_content_resolved(GContentResolver *, gid_t, GStudyProject *);
+static void on_new_content_resolved(GContentResolver *, wgroup_id_t, GStudyProject *);
/* Réceptionne la recette d'une analyse de contenu. */
static void on_loaded_content_analyzed(GLoadedContent *, gboolean, GStudyProject *);
@@ -568,23 +564,13 @@ static void g_study_project_destroy_content_loading(GStudyProject *project, load
explorer = get_current_content_explorer();
resolver = get_current_content_resolver();
- if (params->exp_count == 1)
+ for (i = 0; i < params->exp_count; i++)
{
- g_content_resolver_delete_group(resolver, *params->exp_gid);
- g_content_explorer_delete_group(explorer, *params->exp_gid);
+ g_content_resolver_delete_group(resolver, *params->exp_wids[i]);
+ g_content_explorer_delete_group(explorer, *params->exp_wids[i]);
}
- else
- {
- for (i = 0; i < params->exp_count; i++)
- {
- g_content_resolver_delete_group(resolver, *params->exp_gids[i]);
- g_content_explorer_delete_group(explorer, *params->exp_gids[i]);
- }
-
- free(params->exp_gids);
-
- }
+ free(params->exp_wids);
g_object_unref(G_OBJECT(explorer));
g_object_unref(G_OBJECT(resolver));
@@ -611,7 +597,7 @@ static void g_study_project_destroy_content_loading(GStudyProject *project, load
/******************************************************************************
* *
* Paramètres : project = projet dont le contenu est à consulter. *
-* gid = identifiant du groupe d'exploration recherché. *
+* wid = identifiant du groupe d'exploration recherché. *
* ptr = pointeur vers la valeur d'origine externe. *
* *
* Description : Retrouve les infos de chargements liées à une exploration. *
@@ -622,10 +608,10 @@ static void g_study_project_destroy_content_loading(GStudyProject *project, load
* *
******************************************************************************/
-static loading_params *g_study_project_find_exploration(GStudyProject *project, gid_t gid, const gid_t **ptr)
+static loading_params *g_study_project_find_exploration(GStudyProject *project, wgroup_id_t wid, const wgroup_id_t **ptr)
{
loading_params *result; /* Trouvaille à retourner */
- const gid_t *value; /* Raccourci de confort */
+ const wgroup_id_t *value; /* Raccourci de confort */
size_t i; /* Boucle de parcours #1 */
size_t k; /* Boucle de parcours #2 */
@@ -636,28 +622,15 @@ static loading_params *g_study_project_find_exploration(GStudyProject *project,
value = NULL;
for (i = 0; i < project->ld_count && result == NULL; i++)
- {
- if (project->ld_params[i].exp_count == 1)
+ for (k = 0; k < project->ld_params[i].exp_count && result == NULL; k++)
{
- value = project->ld_params[i].exp_gid;
+ value = project->ld_params[i].exp_wids[k];
- if (*value == gid)
+ if (*value == wid)
result = &project->ld_params[i];
}
- else
- for (k = 0; k < project->ld_params[i].exp_count && result == NULL; k++)
- {
- value = project->ld_params[i].exp_gids[k];
-
- if (*value == gid)
- result = &project->ld_params[i];
-
- }
-
- }
-
if (ptr != NULL)
{
assert(result == NULL || value != NULL);
@@ -706,8 +679,7 @@ static void g_study_project_recover_binary_contents(GStudyProject *project, xmlD
params = g_study_project_prepare_content_loading(project);
- if (count > 1)
- params->exp_gids = (const gid_t **)malloc(count * sizeof(gid_t *));
+ params->exp_wids = (const wgroup_id_t **)malloc(count * sizeof(wgroup_id_t *));
params->resolved = 0;
@@ -730,13 +702,7 @@ static void g_study_project_recover_binary_contents(GStudyProject *project, xmlD
continue;
}
- if (count == 1)
- {
- params->exp_gid = g_content_explorer_create_group(explorer, content);
- explored++;
- }
- else
- params->exp_gids[explored++] = g_content_explorer_create_group(explorer, content);
+ params->exp_wids[explored++] = g_content_explorer_create_group(explorer, content);
g_object_unref(G_OBJECT(content));
@@ -780,7 +746,7 @@ void g_study_project_discover_binary_content(GStudyProject *project, GBinContent
params = g_study_project_prepare_content_loading(project);
- params->exp_gid = g_content_explorer_create_group(explorer, content);
+ params->exp_wids = (const wgroup_id_t **)malloc(sizeof(wgroup_id_t *));
params->exp_count = 1;
params->resolved = 0;
@@ -788,6 +754,8 @@ void g_study_project_discover_binary_content(GStudyProject *project, GBinContent
params->xdoc = NULL;
params->context = NULL;
+ params->exp_wids[0] = g_content_explorer_create_group(explorer, content);
+
g_mutex_unlock(&project->ld_mutex);
g_object_unref(G_OBJECT(explorer));
@@ -798,7 +766,7 @@ void g_study_project_discover_binary_content(GStudyProject *project, GBinContent
/******************************************************************************
* *
* Paramètres : explorer = gestionnaire d'explorations à consulter. *
-* gid = groupe d'exploration concerné. *
+* wid = groupe d'exploration concerné. *
* project = projet avide des résultats des opérations. *
* *
* Description : Note la fin d'une phase d'exploration de contenu. *
@@ -809,31 +777,28 @@ void g_study_project_discover_binary_content(GStudyProject *project, GBinContent
* *
******************************************************************************/
-static void on_new_content_explored(GContentExplorer *explorer, gid_t gid, GStudyProject *project)
+static void on_new_content_explored(GContentExplorer *explorer, wgroup_id_t wid, GStudyProject *project)
{
- const gid_t *gid_ptr; /* Référence vers l'origine */
+ const wgroup_id_t *wid_ptr; /* Référence vers l'origine */
loading_params *params; /* Informations de chargement */
GBinContent **available; /* Contenus binaires présents */
size_t count; /* Quantité de ces contenus */
- const wgroup_id_t *wid; /* Groupe de tâches */
GContentResolver *resolver; /* Resolveur de contenus */
size_t i; /* Boucle de parcours */
g_mutex_lock(&project->ld_mutex);
- params = g_study_project_find_exploration(project, gid, &gid_ptr);
+ params = g_study_project_find_exploration(project, wid, &wid_ptr);
/* S'il s'agit bien d'une exploration nouvelle */
if (params != NULL)
{
- wid = g_content_explorer_get_group_work_id(explorer, gid);
-
- available = g_content_explorer_get_all(explorer, gid, &count);
+ available = g_content_explorer_get_all(explorer, wid, &count);
assert(count > 0);
resolver = get_current_content_resolver();
- g_content_resolver_create_group(resolver, wid, gid_ptr, available, count);
+ g_content_resolver_create_group(resolver, wid_ptr, available, count);
g_object_unref(G_OBJECT(resolver));
@@ -852,7 +817,7 @@ static void on_new_content_explored(GContentExplorer *explorer, gid_t gid, GStud
/******************************************************************************
* *
* Paramètres : resolver = gestionnaire de résolutions à consulter. *
-* gid = groupe d'exploration concerné. *
+* wid = groupe d'exploration concerné. *
* project = projet avide des résultats des opérations. *
* *
* Description : Note la fin d'une phase de resolution de contenu. *
@@ -863,7 +828,7 @@ static void on_new_content_explored(GContentExplorer *explorer, gid_t gid, GStud
* *
******************************************************************************/
-static void on_new_content_resolved(GContentResolver *resolver, gid_t gid, GStudyProject *project)
+static void on_new_content_resolved(GContentResolver *resolver, wgroup_id_t wid, GStudyProject *project)
{
loading_params *params; /* Informations de chargement */
GLoadedContent **available; /* Contenus chargés valables */
@@ -878,12 +843,12 @@ static void on_new_content_resolved(GContentResolver *resolver, gid_t gid, GStud
g_mutex_lock(&project->ld_mutex);
- params = g_study_project_find_exploration(project, gid, NULL);
+ params = g_study_project_find_exploration(project, wid, NULL);
/* S'il s'agit bien d'une exploration nouvelle */
if (params != NULL)
{
- available = g_content_resolver_get_all(resolver, gid, &count);
+ available = g_content_resolver_get_all(resolver, wid, &count);
/* Rechargement à partir d'XML ? */
if (params->xdoc != NULL)