From 5641974f5b59ab218f6892e7ada08f4df5a87f45 Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Mon, 10 Jun 2024 09:41:23 +0200
Subject: [PATCH] Removed float16.h

---
 src/CMakeLists.txt |  1 -
 src/Makefile.am    |  1 -
 src/binary.c       |  5 +++--
 src/binary.h       |  7 +++++--
 src/extra.h        |  7 +++++--
 src/extralib.c     | 19 +++++++++----------
 src/float16.h      | 21 ---------------------
 7 files changed, 22 insertions(+), 39 deletions(-)
 delete mode 100644 src/float16.h

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 375e9df15..462d9aa75 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -50,7 +50,6 @@ list( APPEND cdi_src_files
   exse.h
   extra.h
   extralib.c
-  float16.h
   file.c
   file.h
   gaussian_latitudes.c
diff --git a/src/Makefile.am b/src/Makefile.am
index db8e2314f..c124470cd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -127,7 +127,6 @@ libcdi_la_SOURCES = \
   exse.h \
   extra.h \
   extralib.c \
-  float16.h \
   file.c \
   file.h \
   gaussian_latitudes.c \
diff --git a/src/binary.c b/src/binary.c
index 50d151e0f..d76aff647 100644
--- a/src/binary.c
+++ b/src/binary.c
@@ -1,4 +1,5 @@
-#include "cdi.h"
+#define CDI_BIGENDIAN 0     // Byte order BIGENDIAN
+#define CDI_LITTLEENDIAN 1  // Byte order LITTLEENDIAN
 #include "error.h"
 #include "file.h"
 #include "swap.h"
@@ -173,7 +174,7 @@ binWriteFlt64(int fileID, int byteswap, size_t size, double *ptr)
   return 0;
 }
 
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
 int
 binWriteFlt16(int fileID, int byteswap, size_t size, _Float16 *ptr)
 {
diff --git a/src/binary.h b/src/binary.h
index cc4992cdb..2cbd83402 100644
--- a/src/binary.h
+++ b/src/binary.h
@@ -1,9 +1,12 @@
 #ifndef BINARY_H
 #define BINARY_H
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdio.h>
 #include <inttypes.h>
-#include "float16.h"
 
 #ifndef HOST_ENDIANNESS
 #ifdef __cplusplus
@@ -31,7 +34,7 @@ int binWriteInt64(int fileID, int byteswap, size_t size, int64_t *ptr);
 int binWriteFlt32(int fileID, int byteswap, size_t size, float *ptr);
 int binWriteFlt64(int fileID, int byteswap, size_t size, double *ptr);
 
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
 int binWriteFlt16(int fileID, int byteswap, size_t size, _Float16 *ptr);
 #endif
 
diff --git a/src/extra.h b/src/extra.h
index 2104dd4f0..1c586432d 100644
--- a/src/extra.h
+++ b/src/extra.h
@@ -1,6 +1,10 @@
 #ifndef _EXTRA_H
 #define _EXTRA_H
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 enum
 {
   EXT_REAL = 1,
@@ -39,8 +43,7 @@ int extDefHeader(void *ext, const int *header);
 int extDefDataFP32(void *ext, const float *data);
 int extDefDataFP64(void *ext, const double *data);
 
-#include "float16.h"
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
 int extInqDataFP16(void *ext, _Float16 *data);
 int extDefDataFP16(void *ext, const _Float16 *data);
 #endif
diff --git a/src/extralib.c b/src/extralib.c
index 4f45eccb0..6417483d9 100644
--- a/src/extralib.c
+++ b/src/extralib.c
@@ -10,7 +10,6 @@
 #include "binary.h"
 #include "exse.h"
 #include "swap.h"
-#include "float16.h"
 
 enum
 {
@@ -237,7 +236,7 @@ extInqData(extrec_t *extp, int prec, void *data)
           memcpy(data, buffer, datasize * prec);
         else if (EXSE_PREC_FP64 == prec)
           for (size_t i = 0; i < datasize; ++i) ((double *) data)[i] = (double) ((float *) buffer)[i];
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
         else if (EXSE_PREC_FP16 == prec)
           for (size_t i = 0; i < datasize; ++i) ((_Float16 *) data)[i] = (_Float16) ((float *) buffer)[i];
 #endif
@@ -250,13 +249,13 @@ extInqData(extrec_t *extp, int prec, void *data)
         memcpy(data, buffer, datasize * prec);
       else if (EXSE_PREC_FP32 == prec)
         for (size_t i = 0; i < datasize; ++i) ((float *) data)[i] = (float) ((double *) buffer)[i];
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
       else if (EXSE_PREC_FP16 == prec)
         for (size_t i = 0; i < datasize; ++i) ((_Float16 *) data)[i] = (_Float16) ((double *) buffer)[i];
 #endif
 
       break;
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
     case EXSE_PREC_FP16:
       if (EXSE_PREC_FP16 == prec)
         memcpy(data, buffer, datasize * prec);
@@ -288,7 +287,7 @@ extInqDataFP64(void *ext, double *data)
 {
   return extInqData((extrec_t *) ext, EXSE_PREC_FP64, (void *) data);
 }
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
 int
 extInqDataFP16(void *ext, _Float16 *data)
 {
@@ -326,7 +325,7 @@ extDefData(void *ext, int prec, const void *data)
           memcpy(extp->buffer, data, datasize * prec);
         else if (EXSE_PREC_FP64 == prec)
           for (size_t i = 0; i < datasize; i++) ((float *) extp->buffer)[i] = (float) ((double *) data)[i];
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
         else if (EXSE_PREC_FP16 == prec)
           for (size_t i = 0; i < datasize; i++) ((float *) extp->buffer)[i] = (float) ((_Float16 *) data)[i];
 #endif
@@ -338,13 +337,13 @@ extDefData(void *ext, int prec, const void *data)
           memcpy(extp->buffer, data, datasize * prec);
         else if (EXSE_PREC_FP32 == prec)
           for (size_t i = 0; i < datasize; i++) ((double *) extp->buffer)[i] = (double) ((float *) data)[i];
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
         else if (EXSE_PREC_FP16 == prec)
           for (size_t i = 0; i < datasize; i++) ((double *) extp->buffer)[i] = (double) ((_Float16 *) data)[i];
 #endif
         break;
       }
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
     case EXSE_PREC_FP16:
       {
         if (EXSE_PREC_FP16 == prec)
@@ -378,7 +377,7 @@ extDefDataFP64(void *ext, const double *data)
 {
   return extDefData(ext, EXSE_PREC_FP64, (void *) data);
 }
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
 int
 extDefDataFP16(void *ext, const _Float16 *data)
 {
@@ -533,7 +532,7 @@ extWrite(int fileID, void *ext)
 
   switch (rprec)
     {
-#ifdef HAVE_FLOAT16
+#ifdef HAVE__FLOAT16
     case EXSE_PREC_FP16:
       {
         binWriteFlt16(fileID, byteswap, extp->datasize, (_Float16 *) extp->buffer);
diff --git a/src/float16.h b/src/float16.h
deleted file mode 100644
index 2e05ad628..000000000
--- a/src/float16.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef FLOAT16_H
-#define FLOAT16_H
-
-// CAUTION: __is_identifier behaves opposite how you would expect!
-// '__is_identifier' returns '0' if '__x' is a reserved identifier provided by
-// the compiler and '1' otherwise.
-// borrowed from LLVM __config header under Apache license 2.
-// (https://www.mend.io/blog/top-10-apache-license-questions-answered/)
-#ifndef __is_identifier       // Optional of course.
-#define __is_identifier(x) 1  // Compatibility with non-clang compilers.
-#endif
-
-// More sensible macro for keyword detection
-#define __has_keyword(__x) !(__is_identifier(__x))
-
-// map a half float type, if available, to _OptionalHalfFloatType
-#if __has_keyword(_Float16)
-#define HAVE_FLOAT16
-#endif
-
-#endif
-- 
GitLab