From ac643c85efd999cd5a3f2d972415e3c185f47b49 Mon Sep 17 00:00:00 2001
From: "raphael.bach" <raphael.bach@etu.hesge.ch>
Date: Tue, 21 Jun 2022 00:09:51 +0200
Subject: [PATCH] Split `fmpi_type.h` in two files

---
 include/fmpi_data.h                           |  2 +-
 include/internal/fmpi_futhark.h               |  2 +-
 include/internal/fmpi_type.h                  | 73 +++++++++++++++++++
 include/internal/generic/fmpi_data_generic.h  |  1 +
 .../internal/generic/fmpi_futhark_generic.h   |  1 +
 include/internal/generic/fmpi_generic.h       |  2 -
 .../internal/generic/fmpi_reduce_generic.h    |  1 +
 .../{fmpi_type.h => fmpi_type_generic.h}      | 41 +----------
 src/fmpi_data.c                               |  2 +-
 src/fmpi_futhark.c                            |  1 +
 src/fmpi_reduce.c                             |  1 +
 src/fmpi_task.c                               |  1 +
 12 files changed, 83 insertions(+), 45 deletions(-)
 create mode 100644 include/internal/fmpi_type.h
 rename include/internal/generic/{fmpi_type.h => fmpi_type_generic.h} (77%)

diff --git a/include/fmpi_data.h b/include/fmpi_data.h
index cf6dd06..c119434 100644
--- a/include/fmpi_data.h
+++ b/include/fmpi_data.h
@@ -30,8 +30,8 @@
 #include <stddef.h> // size_t
 // Internal
 #include "internal/fmpi_common.h"
+#include "internal/fmpi_type.h"
 #include "internal/generic/fmpi_data_generic.h"
-#include "internal/generic/fmpi_type.h"
 /*==============================================================================
     TYPE
 ==============================================================================*/
diff --git a/include/internal/fmpi_futhark.h b/include/internal/fmpi_futhark.h
index 1d93ac4..f96d0e2 100644
--- a/include/internal/fmpi_futhark.h
+++ b/include/internal/fmpi_futhark.h
@@ -30,8 +30,8 @@
 #include <stddef.h> // size_t
 // Internal
 #include "fmpi_error.h"
+#include "internal/fmpi_type.h"
 #include "internal/generic/fmpi_futhark_generic.h"
-#include "internal/generic/fmpi_type.h"
 /*==============================================================================
     STRUCT
 ==============================================================================*/
diff --git a/include/internal/fmpi_type.h b/include/internal/fmpi_type.h
new file mode 100644
index 0000000..8f9df15
--- /dev/null
+++ b/include/internal/fmpi_type.h
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: 0BSD
+/*!
+ * @file
+ * @date 20.06.2022
+ * @license{
+ * BSD Zero Clause License
+ *
+ * Copyright (c) 2022 by Raphael Bach
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ * }
+ */
+/*==============================================================================
+    GUARD
+==============================================================================*/
+#ifndef FMPI_TYPE_H_20220620234502
+#define FMPI_TYPE_H_20220620234502
+/*==============================================================================
+    INCLUDE
+==============================================================================*/
+// C Standard Library
+#include <stddef.h> // size_t
+// Internal
+#include "internal/generic/fmpi_type_generic.h"
+/*==============================================================================
+    TYPE
+==============================================================================*/
+typedef enum fmpi_type_base {
+    FMPI_TYPE_START = 0,
+    FMPI_TYPE_i8    = 0,
+    FMPI_TYPE_i16   = 1,
+    FMPI_TYPE_i32   = 2,
+    FMPI_TYPE_i64   = 3,
+    FMPI_TYPE_u8    = 4,
+    FMPI_TYPE_u16   = 5,
+    FMPI_TYPE_u32   = 6,
+    FMPI_TYPE_u64   = 7,
+    FMPI_TYPE_f32   = 8,
+    FMPI_TYPE_f64   = 9,
+    FMPI_TYPE_bool  = 10,
+    FMI_TYPE_END
+} fmpi_type_base;
+/**
+ * Derived types
+ *
+ * - The Futhark C API passes parameters to a Futhark function differently
+ * depending on their type being an `arithmetic type`, a `struct type` or an
+ * `array type`.
+ * - Loosely based on the definition of derived types in C17 6.2.5
+ */
+typedef enum fmpi_type_derived {
+    FMPI_TYPE_NONE, //!< Arithmetic type
+    FMPI_TYPE_ARRAY //!< Array type
+} fmpi_type_derived;
+
+typedef struct fmpi_type {
+    enum fmpi_type_base base;
+    enum fmpi_type_derived derived;
+    size_t size;
+} fmpi_type;
+/*==============================================================================
+    GUARD
+==============================================================================*/
+#endif // FMPI_TYPE_H_20220620234502
diff --git a/include/internal/generic/fmpi_data_generic.h b/include/internal/generic/fmpi_data_generic.h
index 5bfdb9e..1a5fb5f 100644
--- a/include/internal/generic/fmpi_data_generic.h
+++ b/include/internal/generic/fmpi_data_generic.h
@@ -30,6 +30,7 @@
 #include <stddef.h> // size_t
 // Internal
 #include "fmpi_generic.h"
+#include "fmpi_type_generic.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_futhark_generic.h b/include/internal/generic/fmpi_futhark_generic.h
index 29732ce..f97b4e2 100644
--- a/include/internal/generic/fmpi_futhark_generic.h
+++ b/include/internal/generic/fmpi_futhark_generic.h
@@ -33,6 +33,7 @@
 // Internal
 #include "../fmpi_common.h"
 #include "fmpi_generic.h"
+#include "fmpi_type_generic.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_generic.h b/include/internal/generic/fmpi_generic.h
index 3b0e175..18c6232 100644
--- a/include/internal/generic/fmpi_generic.h
+++ b/include/internal/generic/fmpi_generic.h
@@ -30,8 +30,6 @@
 #include "../../../external/cpl/cpl_map.h"
 #include "../../../external/cpl/cpl_token.h"
 #include "../../../external/cpl/cpl_util.h"
-// Internal
-#include "fmpi_type.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_reduce_generic.h b/include/internal/generic/fmpi_reduce_generic.h
index 4372a1d..034b263 100644
--- a/include/internal/generic/fmpi_reduce_generic.h
+++ b/include/internal/generic/fmpi_reduce_generic.h
@@ -30,6 +30,7 @@
 #include <stddef.h> // size_t
 // Internal
 #include "fmpi_generic.h"
+#include "fmpi_type_generic.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_type.h b/include/internal/generic/fmpi_type_generic.h
similarity index 77%
rename from include/internal/generic/fmpi_type.h
rename to include/internal/generic/fmpi_type_generic.h
index 3bef07f..4b62047 100644
--- a/include/internal/generic/fmpi_type.h
+++ b/include/internal/generic/fmpi_type_generic.h
@@ -27,10 +27,9 @@
     INCLUDE
 ==============================================================================*/
 // C Standard Library
-#include <stddef.h> // size_t
 #include <stdint.h>
 /*==============================================================================
-    TYPEDEF
+    TYPE
 ==============================================================================*/
 // Match C type name with Futhark type name
 typedef int8_t   i8;
@@ -44,44 +43,6 @@ typedef uint64_t u64;
 typedef float    f32;
 typedef double   f64;
 typedef _Bool    bool;
-/*==============================================================================
-    ENUM
-==============================================================================*/
-typedef enum fmpi_type_base {
-    FMPI_TYPE_START = 0,
-    FMPI_TYPE_i8    = 0,
-    FMPI_TYPE_i16   = 1,
-    FMPI_TYPE_i32   = 2,
-    FMPI_TYPE_i64   = 3,
-    FMPI_TYPE_u8    = 4,
-    FMPI_TYPE_u16   = 5,
-    FMPI_TYPE_u32   = 6,
-    FMPI_TYPE_u64   = 7,
-    FMPI_TYPE_f32   = 8,
-    FMPI_TYPE_f64   = 9,
-    FMPI_TYPE_bool  = 10,
-    FMI_TYPE_END
-} fmpi_type_base;
-/**
- * Derived types
- *
- * - The Futhark C API passes parameters to a Futhark function differently
- * depending on their type being an `arithmetic type`, a `struct type` or an
- * `array type`.
- * - Loosely based on the definition of derived types in C17 6.2.5
- */
-typedef enum fmpi_type_derived {
-    FMPI_TYPE_NONE, //!< Arithmetic type
-    FMPI_TYPE_ARRAY //!< Array type
-} fmpi_type_derived;
-/*==============================================================================
-    STRUCT
-==============================================================================*/
-typedef struct fmpi_type {
-    enum fmpi_type_base base;
-    enum fmpi_type_derived derived;
-    size_t size;
-} fmpi_type;
 /*==============================================================================
     DEFINE
 ==============================================================================*/
diff --git a/src/fmpi_data.c b/src/fmpi_data.c
index b333b62..bf8cf93 100644
--- a/src/fmpi_data.c
+++ b/src/fmpi_data.c
@@ -29,7 +29,7 @@
 // Internal
 #include "internal/fmpi_common.h"
 #include "internal/fmpi_ctx.h"
-#include "internal/generic/fmpi_type.h"
+#include "internal/fmpi_type.h"
 /*==============================================================================
     PUBLIC FUNCTION DEFINITION
 ==============================================================================*/
diff --git a/src/fmpi_futhark.c b/src/fmpi_futhark.c
index d09ef97..7709cb6 100644
--- a/src/fmpi_futhark.c
+++ b/src/fmpi_futhark.c
@@ -30,6 +30,7 @@
 // Internal
 #include "internal/fmpi_common.h"
 #include "internal/fmpi_futhark_entry.h"
+#include "internal/fmpi_type.h"
 #include "internal/generic/fmpi_generic.h"
 /*==============================================================================
     STATIC
diff --git a/src/fmpi_reduce.c b/src/fmpi_reduce.c
index c0191d8..572df19 100644
--- a/src/fmpi_reduce.c
+++ b/src/fmpi_reduce.c
@@ -34,6 +34,7 @@
 #include "internal/fmpi_futhark_entry.h"
 #include "internal/fmpi_mpi.h"
 #include "internal/generic/fmpi_generic.h"
+#include "internal/generic/fmpi_type_generic.h"
 /*==============================================================================
     PUBLIC FUNCTION DEFINITION
 ==============================================================================*/
diff --git a/src/fmpi_task.c b/src/fmpi_task.c
index 4c37be6..f5ac963 100644
--- a/src/fmpi_task.c
+++ b/src/fmpi_task.c
@@ -60,6 +60,7 @@ struct fmpi_task fmpi_task_register(
         if(task.domains[i].parts == NULL) {
             FMPI_RAISE_ERROR(ctx->err_handler, "FMPI", "fmpi_new_domain() failed!");
             continue;
+            struct fmpi_type t;
         }
         void * start = fmpi_futhark_new_data(
             ctx->fut, task.domains[i].parts[rank].start, task.domains[i].data.type.base,
-- 
GitLab