From 1984801f769c3b5e708070adeb4e8702dd5f2c66 Mon Sep 17 00:00:00 2001
From: Leandre Lacourt <lacourtl@santel.imag.fr>
Date: Fri, 7 Jun 2024 14:00:46 +0200
Subject: [PATCH] ajout des start, join, init et reset des taches

---
 bin/lustre-mt/main.ml | 89 ++++++++++++++++++++++++++-----------------
 1 file changed, 53 insertions(+), 36 deletions(-)

diff --git a/bin/lustre-mt/main.ml b/bin/lustre-mt/main.ml
index b008161..6ef2dbc 100644
--- a/bin/lustre-mt/main.ml
+++ b/bin/lustre-mt/main.ml
@@ -70,41 +70,59 @@ let main () =
   in
   List.iter print_task_structs !tasks;
 
-  (* fprintf cfile "/* runners */\n";
-  *let print_task_runners task = 
-  *  fprintf cfile "void* %s_runner(void* cd) {\n" task.name;
-  *  fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) cd" task.name task.name;
-  *  fprintf cfile "\twhile(1){\n";
-  *  fprintf cfile "\t\tSEM_WAIT(ts->sem_start);\n";
-  *  fprintf cfile "\t\t%s_step(&ts->ctx);\n" task.name;
-  *  fprintf cfile "\t\tSEM_SIGNAL(ts->sem_join);\n";
-  *  fprintf cfile "\t}\n";
-  *  fprintf cfile "}\n\n"
-  *in
-  *List.iter print_task_runners !tasks;
-*
-  *fprintf cfile "/* task Initializers */\n";
-  *let print_task_inits task = 
-  *  fprintf cfile "%s_TASK_type %s_TASK_init() {\n" task.name task.name;
-  *  fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));\n" task.name task.name task.name;
-  *  fprintf cfile "\t%s_ctx_init(&ts->ctx);\n" task.name;
-  *  fprintf cfile "SEM_INIT(ts->sem_start, 0, 1);\n";
-  *  fprintf cfile "SEM_INIT(ts->sem_join, 0, 1);\n";
-  *  fprintf cfile "pthread_create(&(ts->thr), NULL, %s_runner, ts);\n" task.name;
-  *  fprintf cfile "return (void*) ts;\n";
-  *  fprintf cfile "}\n\n"
-  *in
-  *List.iter print_task_inits !tasks;
-  *
-  *fprintf cfile "/* task resets */\n";
-  *let print_task_resets task =
-  *  fprintf cfile "void %s_TASK_reset(%s_TASK_type tD) {\n" task.name task.name;
-  *  fprintf cfile "%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
-  *  fprintf cfile "%s_ctx_reset(&ts->ctx)\n;" task.name;
-  *  fprintf cfile "}\n\n"
-  *in
-  *List.iter print_task_resets !tasks; 
-  *)
+  fprintf cfile "/* runners */\n";
+  let print_task_runners task = 
+    fprintf cfile "void* %s_runner(void* cd) {\n" task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) cd\n" task.name task.name;
+    fprintf cfile "\twhile(1){\n";
+    fprintf cfile "\t\tSEM_WAIT(ts->sem_start);\n";
+    fprintf cfile "\t\t%s_step(&ts->ctx);\n" task.name;
+    fprintf cfile "\t\tSEM_SIGNAL(ts->sem_join);\n";
+    fprintf cfile "\t}\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_runners !tasks;
+
+  fprintf cfile "/* task Initializers */\n";
+  let print_task_inits task = 
+    fprintf cfile "%s_TASK_type %s_TASK_init() {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));\n" task.name task.name task.name;
+    fprintf cfile "\t%s_ctx_init(&ts->ctx);\n" task.name;
+    fprintf cfile "\tSEM_INIT(ts->sem_start, 0, 1);\n";
+    fprintf cfile "\tSEM_INIT(ts->sem_join, 0, 1);\n";
+    fprintf cfile "\tpthread_create(&(ts->thr), NULL, %s_runner, ts);\n" task.name;
+    fprintf cfile "\treturn (void*) ts;\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_inits !tasks;
+  
+  fprintf cfile "/* task resets */\n";
+  let print_task_resets task =
+    fprintf cfile "void %s_TASK_reset(%s_TASK_type tD) {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
+    fprintf cfile "\t%s_ctx_reset(&ts->ctx);\n" task.name;
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_resets !tasks; 
+
+  fprintf cfile "/* task start */\n";
+  let print_task_starts task =
+    fprintf cfile "void %s_TASK_START(%s_TASK_type tD) {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
+    fprintf cfile "\tSEM_SIGNAL(ts->sem_start);\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_starts !tasks; 
+
+  fprintf cfile "/* task join */\n";
+  let print_task_joins task =
+    fprintf cfile "void %s_TASK_JOIN(%s_TASK_type tD) {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
+    fprintf cfile "\tSEM_WAIT(ts->sem_join);\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_joins !tasks; 
+  
 
   (* fprintf cfile "/* task inputs */\n";
   * let print_task_inputs task = 
@@ -112,7 +130,6 @@ let main () =
   *   task.
   * in
   * List.iter print_task_inputs !tasks;
-  *)
 
 
 
-- 
GitLab