summaryrefslogtreecommitdiff
path: root/src/glibext/workgroup.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/workgroup.h')
-rw-r--r--src/glibext/workgroup.h95
1 files changed, 21 insertions, 74 deletions
diff --git a/src/glibext/workgroup.h b/src/glibext/workgroup.h
index 89eed12..1a003c8 100644
--- a/src/glibext/workgroup.h
+++ b/src/glibext/workgroup.h
@@ -1,8 +1,8 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
- * delayed.h - prototypes pour la gestion des travaux différés
+ * workgroup.h - prototypes pour la gestion des travaux différés
*
- * Copyright (C) 2009-2018 Cyrille Bagard
+ * Copyright (C) 2009-2024 Cyrille Bagard
*
* This file is part of Chrysalide.
*
@@ -21,58 +21,22 @@
*/
-#ifndef _GLIBEXT_DELAYED_H
-#define _GLIBEXT_DELAYED_H
+#ifndef _GLIBEXT_WORKGROUP_H
+#define _GLIBEXT_WORKGROUP_H
-#include <glib-object.h>
#include <stdbool.h>
#include <stdint.h>
+#include "helpers.h"
+#include "work.h"
-/* -------------------------- TACHE DIFFEREE DANS LE TEMPS -------------------------- */
-#define G_TYPE_DELAYED_WORK g_delayed_work_get_type()
-#define G_DELAYED_WORK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_delayed_work_get_type(), GDelayedWork))
-#define G_IS_DELAYED_WORK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_delayed_work_get_type()))
-#define G_DELAYED_WORK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_DELAYED_WORK, GDelayedWorkClass))
-#define G_IS_DELAYED_WORK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_DELAYED_WORK))
-#define G_DELAYED_WORK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_DELAYED_WORK, GDelayedWorkClass))
+#define G_TYPE_WORK_GROUP (g_work_group_get_type())
-
-/* Travail différé (instance) */
-typedef struct _GDelayedWork GDelayedWork;
-
-/* Travail différé (classe) */
-typedef struct _GDelayedWorkClass GDelayedWorkClass;
-
-
-/* Indique le type défini pour les travaux différés. */
-GType g_delayed_work_get_type(void);
-
-/* Attend la fin de l'exécution d'une tâche donnée. */
-void g_delayed_work_wait_for_completion(GDelayedWork *);
-
-
-
-/* ------------------------- TRAITEMENT DE TACHES DIFFEREES ------------------------- */
-
-
-#define G_TYPE_WORK_QUEUE g_work_queue_get_type()
-#define G_WORK_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_work_queue_get_type(), GWorkQueue))
-#define G_IS_WORK_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_work_queue_get_type()))
-#define G_WORK_QUEUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_WORK_QUEUE, GWorkQueueClass))
-#define G_IS_WORK_QUEUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_WORK_QUEUE))
-#define G_WORK_QUEUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_WORK_QUEUE, GWorkQueueClass))
-
-
-/* Gestionnaire des travaux différés (instance) */
-typedef struct _GWorkQueue GWorkQueue;
-
-/* Gestionnaire des travaux différés (classe) */
-typedef struct _GWorkQueueClass GWorkQueueClass;
+DECLARE_GTYPE(GWorkGroup, g_work_group, G, WORK_GROUP);
/**
@@ -84,44 +48,27 @@ typedef struct _GWorkQueueClass GWorkQueueClass;
typedef uint64_t wgroup_id_t;
-/* Indique le type défini pour le gestionnaire des travaux différés. */
-GType g_work_queue_get_type(void);
-
-/* Créé un nouveau gestionnaire de tâches parallèles. */
-GWorkQueue *g_work_queue_new(void);
-
-/* Constitue un nouveau groupe de travail. */
-wgroup_id_t g_work_queue_define_work_group(GWorkQueue *);
-
-/* Constitue un nouveau petit groupe de travail. */
-wgroup_id_t g_work_queue_define_tiny_work_group(GWorkQueue *, guint);
+/* Crée un nouveau thread dédié à un type de travaux donné. */
+GWorkGroup *g_work_group_new(wgroup_id_t, guint);
-/* Dissout un groupe de travail existant. */
-void g_work_queue_delete_work_group(GWorkQueue *, wgroup_id_t);
+/* Fournit l'identifiant associé à un groupe de travail. */
+wgroup_id_t g_work_group_get_id(const GWorkGroup *);
-/* Place une nouvelle tâche en attente. */
-void g_work_queue_schedule_work(GWorkQueue *, GDelayedWork *, wgroup_id_t);
+/* Place une nouvelle tâche en attente dans une file dédiée. */
+void g_work_group_schedule(GWorkGroup *, GGenericWork *);
-/* Détermine si un groupe est vide de toute programmation. */
-bool g_work_queue_is_empty(GWorkQueue *, wgroup_id_t);
+/* Détermine si le groupe est vide de toute programmation. */
+bool g_work_group_is_empty(GWorkGroup *);
/* Attend que toutes les tâches d'un groupe soient traitées. */
-void g_work_queue_wait_for_completion(GWorkQueue *, wgroup_id_t);
+void g_work_group_wait_for_completion(GWorkGroup *);
-/* Attend que toutes les tâches de tout groupe soient traitées. */
-void g_work_queue_wait_for_all_completions(GWorkQueue *, const wgroup_id_t *, size_t);
-
-
-/* Etudie le besoin d'attendre d'avantage de prochaines tâches. */
-typedef bool (* wait_for_incoming_works_cb) (GWorkQueue *, wgroup_id_t, void *);
-
-
-/* Modifie les conditions d'attente des fins d'exécutions. */
-void g_work_queue_set_extra_wait_callback(GWorkQueue *, wgroup_id_t, wait_for_incoming_works_cb, void *);
+/* Attend que toutes les tâches d'un groupe soient traitées. */
+bool g_work_group_wait_timed_for_completion(GWorkGroup *, gint64);
/* Force un réveil d'une attente en cours pour la confirmer. */
-void g_work_queue_wake_up_waiters(GWorkQueue *, wgroup_id_t);
+void g_work_group_wake_up_waiters(GWorkGroup *);
-#endif /* _GLIBEXT_DELAYED_H */
+#endif /* _GLIBEXT_WORKGROUP_H */