summaryrefslogtreecommitdiff
path: root/src/analysis/loading.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-06-06 16:59:19 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-06-06 16:59:19 (GMT)
commit74063a8f0e00e1b53b45ddcbd47348d9acce3f67 (patch)
tree3a576ad4f3a82d795ebc84562df522407bc135ef /src/analysis/loading.c
parent3b2c60d63cf14ab1350125a4cba9dce1cefeb58e (diff)
Simplified the whole loading process.
Diffstat (limited to 'src/analysis/loading.c')
-rw-r--r--src/analysis/loading.c71
1 files changed, 43 insertions, 28 deletions
diff --git a/src/analysis/loading.c b/src/analysis/loading.c
index 5e0f651..fa2118f 100644
--- a/src/analysis/loading.c
+++ b/src/analysis/loading.c
@@ -52,7 +52,10 @@ typedef struct _GExploringWork
{
GDelayedWork parent; /* A laisser en premier */
- const wgroup_id_t *wid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
+#ifndef NDEBUG
+ bool wid_defined; /* Validation de l'identifiant */
+#endif
GBinContent *content; /* Contenu brut à disposition */
@@ -88,7 +91,7 @@ static GExploringWork *g_exploring_work_new(GBinContent *);
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 wgroup_id_t *);
+static void g_exploring_work_set_group_id(GExploringWork *, wgroup_id_t);
/* Réalise l'exploration effective de formes de contenus. */
static void g_exploring_work_process(GExploringWork *, GtkStatusStack *);
@@ -169,7 +172,10 @@ typedef struct _GResolvingWork
{
GDelayedWork parent; /* A laisser en premier */
- const wgroup_id_t *wid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
+#ifndef NDEBUG
+ bool wid_defined; /* Validation de l'identifiant */
+#endif
GBinContent *content; /* Contenu brut à disposition */
@@ -205,7 +211,7 @@ static GResolvingWork *g_resolving_work_new(GBinContent *);
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 wgroup_id_t *);
+static void g_resolving_work_set_group_id(GResolvingWork *, wgroup_id_t);
/* Réalise la conversion effective de formes de contenus. */
static void g_resolving_work_process(GResolvingWork *, GtkStatusStack *);
@@ -220,7 +226,7 @@ typedef struct _resolving_group
{
size_t remaining; /* Nombre de tâches restantes */
- const wgroup_id_t *wid; /* Groupe d'appartenance */
+ wgroup_id_t wid; /* Groupe d'appartenance */
GLoadedContent **loaded; /* Contenus reconnus à intégrer*/
size_t count; /* Taille de cette liste */
@@ -322,7 +328,9 @@ static void g_exploring_work_class_init(GExploringWorkClass *klass)
static void g_exploring_work_init(GExploringWork *work)
{
- work->wid = NULL;
+#ifndef NDEBUG
+ work->wid_defined = false;
+#endif
work->content = NULL;
@@ -411,9 +419,9 @@ static wgroup_id_t g_exploring_work_get_group_id(const GExploringWork *work)
{
wgroup_id_t result; /* Identifiant à retourner */
- assert(work->wid != NULL);
+ assert(work->wid_defined);
- result = *work->wid;
+ result = work->wid;
return result;
@@ -433,8 +441,12 @@ static wgroup_id_t g_exploring_work_get_group_id(const GExploringWork *work)
* *
******************************************************************************/
-static void g_exploring_work_set_group_id(GExploringWork *work, const wgroup_id_t *wid)
+static void g_exploring_work_set_group_id(GExploringWork *work, wgroup_id_t wid)
{
+#ifndef NDEBUG
+ work->wid_defined = true;
+#endif
+
work->wid = wid;
}
@@ -680,11 +692,10 @@ static void g_content_explorer_ack(GContentExplorer *explorer, GExploringWork *w
* *
******************************************************************************/
-const wgroup_id_t *g_content_explorer_create_group(GContentExplorer *explorer, GBinContent *content)
+wgroup_id_t g_content_explorer_create_group(GContentExplorer *explorer, GBinContent *content)
{
- const wgroup_id_t *result; /* Identifiant à retourner */
+ 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*/
@@ -694,10 +705,10 @@ const wgroup_id_t *g_content_explorer_create_group(GContentExplorer *explorer, G
queue = get_work_queue();
- new = g_work_queue_define_work_group(queue);
+ result = g_work_queue_define_work_group(queue);
#ifndef NDEBUG
- group = g_content_explorer_find_group(explorer, new);
+ group = g_content_explorer_find_group(explorer, result);
assert(group == NULL);
#endif
@@ -710,9 +721,7 @@ const wgroup_id_t *g_content_explorer_create_group(GContentExplorer *explorer, G
group->original = content;
g_object_ref(G_OBJECT(content));
- group->wid = new;
-
- result = &group->wid;
+ group->wid = result;
group->contents = NULL;
group->count = 0;
@@ -720,11 +729,11 @@ const wgroup_id_t *g_content_explorer_create_group(GContentExplorer *explorer, G
/* Alimentation du contenu initial */
work = g_exploring_work_new(content);
- g_exploring_work_set_group_id(work, &group->wid);
+ g_exploring_work_set_group_id(work, result);
g_signal_connect_swapped(work, "work-completed", G_CALLBACK(g_content_explorer_ack), explorer);
- g_work_queue_schedule_work(queue, G_DELAYED_WORK(work), group->wid);
+ g_work_queue_schedule_work(queue, G_DELAYED_WORK(work), result);
g_mutex_unlock(&explorer->mutex);
@@ -818,7 +827,7 @@ void g_content_explorer_populate_group(GContentExplorer *explorer, wgroup_id_t w
/* Relancement des explorations */
work = g_exploring_work_new(content);
- g_exploring_work_set_group_id(work, &group->wid);
+ g_exploring_work_set_group_id(work, group->wid);
g_signal_connect_swapped(work, "work-completed", G_CALLBACK(g_content_explorer_ack), explorer);
@@ -937,7 +946,9 @@ static void g_resolving_work_class_init(GResolvingWorkClass *klass)
static void g_resolving_work_init(GResolvingWork *work)
{
- work->wid = NULL;
+#ifndef NDEBUG
+ work->wid_defined = false;
+#endif
work->content = NULL;
@@ -1026,9 +1037,9 @@ static wgroup_id_t g_resolving_work_get_group_id(const GResolvingWork *work)
{
wgroup_id_t result; /* Identifiant à retourner */
- assert(work->wid != NULL);
+ assert(work->wid_defined);
- result = *work->wid;
+ result = work->wid;
return result;
@@ -1048,8 +1059,12 @@ static wgroup_id_t g_resolving_work_get_group_id(const GResolvingWork *work)
* *
******************************************************************************/
-static void g_resolving_work_set_group_id(GResolvingWork *work, const wgroup_id_t *wid)
+static void g_resolving_work_set_group_id(GResolvingWork *work, wgroup_id_t wid)
{
+#ifndef NDEBUG
+ work->wid_defined = true;
+#endif
+
work->wid = wid;
}
@@ -1154,7 +1169,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].wid);
+ g_content_resolver_delete_group(resolver, resolver->groups[0].wid);
if (resolver->groups != NULL)
free(resolver->groups);
@@ -1231,7 +1246,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].wid == wid)
+ if (resolver->groups[i].wid == wid)
result = &resolver->groups[i];
return result;
@@ -1292,7 +1307,7 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w
* *
******************************************************************************/
-void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id_t *wid, GBinContent **contents, size_t count)
+void g_content_resolver_create_group(GContentResolver *resolver, 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 */
@@ -1325,7 +1340,7 @@ void g_content_resolver_create_group(GContentResolver *resolver, const wgroup_id
g_signal_connect_swapped(work, "work-completed", G_CALLBACK(g_content_resolver_ack), resolver);
- g_work_queue_schedule_work(queue, G_DELAYED_WORK(work), *wid);
+ g_work_queue_schedule_work(queue, G_DELAYED_WORK(work), wid);
}