aboutsummaryrefslogtreecommitdiff
path: root/src/DatatypeConversion.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/DatatypeConversion.c')
-rw-r--r--src/DatatypeConversion.c102
1 files changed, 55 insertions, 47 deletions
diff --git a/src/DatatypeConversion.c b/src/DatatypeConversion.c
index 478da9b..4619744 100644
--- a/src/DatatypeConversion.c
+++ b/src/DatatypeConversion.c
@@ -2,12 +2,14 @@
@file DatatypeConversion.c
@date Thursday Nov 23 2000
@author Thomas Radke
- @desc
+ @desc
Predefined datatype conversion routines for hyperslab extraction.
- @enddesc
+ @enddesc
@version $Id$
@@*/
+#include <assert.h>
+
#include "cctk.h"
#include "PUGHSlab.h"
#include "PUGHSlabi.h"
@@ -20,72 +22,80 @@ CCTK_FILEVERSION(CactusPUGH_PUGHSlab_DatatypeConversion_c)
/* macro to generate a predefined conversion function
along with its prototype */
-#define CONVERSION_FUNCTION(src_type, dst_type, dst_scalartype, conversion) \
- static void Convert_##src_type##_to_##dst_type (const void *src, \
- void *dst, \
- CCTK_INT nelems, \
- CCTK_INT src_stride, \
- CCTK_INT dst_stride); \
+#define CONVERSION_FUNCTION(source_type, dest_type, dest_elemtype, conversion)\
+static CCTK_INT Convert##source_type##to##dest_type (CCTK_INT nelems, \
+ CCTK_INT src_stride, \
+ CCTK_INT dst_stride, \
+ CCTK_INT src_type, \
+ CCTK_INT dst_type, \
+ CCTK_POINTER_TO_CONST src,\
+ CCTK_POINTER dst); \
+ \
+static CCTK_INT Convert##source_type##to##dest_type (CCTK_INT nelems, \
+ CCTK_INT src_stride, \
+ CCTK_INT dst_stride, \
+ CCTK_INT src_type, \
+ CCTK_INT dst_type, \
+ CCTK_POINTER_TO_CONST src,\
+ CCTK_POINTER dst) \
+{ \
+ CCTK_INT _i; \
+ CCTK_##dest_type *_dst = dst; \
+ const CCTK_##source_type *_src = src; \
\
- static void Convert_##src_type##_to_##dst_type (const void *src, \
- void *dst, \
- CCTK_INT nelems, \
- CCTK_INT src_stride, \
- CCTK_INT dst_stride) \
- { \
- dst_type *_dst = (dst_type *) dst; \
- const src_type *_src = (const src_type *) src; \
\
+ assert (src_type == CCTK_VARIABLE_##source_type); \
+ assert (dst_type == CCTK_VARIABLE_##dest_type); \
+ for (_i = 0; _i < nelems; _i++, _src += src_stride, _dst += dst_stride) \
+ { \
+ conversion (*_src, *_dst, dest_elemtype); \
+ } \
\
- while (nelems--) \
- { \
- conversion (*_src, *_dst, dst_scalartype); \
- _src += src_stride; _dst += dst_stride; \
- } \
- }
+ return (nelems); \
+}
/* the conversion of scalar datatypes (integers and reals) */
#ifdef CONVERT
#undef CONVERT
#endif
-#define CONVERT(src, dst, dst_type) (dst) = (dst_type) (src)
+#define CONVERT(src, dst, dst_type) (dst) = (CCTK_##dst_type) (src)
/* predefined conversion functions for integers */
#if defined(CCTK_INT2) && defined(CCTK_INT4)
-CONVERSION_FUNCTION (CCTK_INT4, CCTK_INT2, CCTK_INT2, CONVERT)
+CONVERSION_FUNCTION (INT4, INT2, INT2, CONVERT)
#endif
#if defined(CCTK_INT2) && defined(CCTK_INT8)
-CONVERSION_FUNCTION (CCTK_INT8, CCTK_INT2, CCTK_INT2, CONVERT)
+CONVERSION_FUNCTION (INT8, INT2, INT2, CONVERT)
#endif
#if defined(CCTK_INT4) && defined(CCTK_INT8)
-CONVERSION_FUNCTION (CCTK_INT8, CCTK_INT4, CCTK_INT4, CONVERT)
+CONVERSION_FUNCTION (INT8, INT4, INT4, CONVERT)
#endif
/* predefined conversion functions for reals */
#if defined(CCTK_REAL4) && defined(CCTK_REAL8)
-CONVERSION_FUNCTION (CCTK_REAL8, CCTK_REAL4, CCTK_REAL4, CONVERT)
+CONVERSION_FUNCTION (REAL8, REAL4, REAL4, CONVERT)
#endif
#if defined(CCTK_REAL4) && defined(CCTK_REAL16)
-CONVERSION_FUNCTION (CCTK_REAL16, CCTK_REAL4, CCTK_REAL4, CONVERT)
+CONVERSION_FUNCTION (REAL16, REAL4, REAL4, CONVERT)
#endif
#if defined(CCTK_REAL8) && defined(CCTK_REAL16)
-CONVERSION_FUNCTION (CCTK_REAL16, CCTK_REAL8, CCTK_REAL8, CONVERT)
+CONVERSION_FUNCTION (REAL16, REAL8, REAL8, CONVERT)
#endif
/* the conversion of complex datatypes */
#undef CONVERT
-#define CONVERT(src, dst, dst_type) (dst).Re = (dst_type) (src).Re; \
- (dst).Im = (dst_type) (src).Im
+#define CONVERT(src, dst, dst_type) (dst).Re = (CCTK_##dst_type) (src).Re; \
+ (dst).Im = (CCTK_##dst_type) (src).Im
/* predefined conversion functions for complex */
#if defined(CCTK_REAL4) && defined(CCTK_REAL8)
-CONVERSION_FUNCTION (CCTK_COMPLEX16, CCTK_COMPLEX8, CCTK_REAL4, CONVERT)
+CONVERSION_FUNCTION (COMPLEX16, COMPLEX8, REAL4, CONVERT)
#endif
#if defined(CCTK_REAL4) && defined(CCTK_REAL16)
-CONVERSION_FUNCTION (CCTK_COMPLEX32, CCTK_COMPLEX16, CCTK_REAL8, CONVERT)
+CONVERSION_FUNCTION (COMPLEX32, COMPLEX16, REAL8, CONVERT)
#endif
#if defined(CCTK_REAL8) && defined(CCTK_REAL16)
-CONVERSION_FUNCTION (CCTK_COMPLEX32, CCTK_COMPLEX8, CCTK_REAL4, CONVERT)
+CONVERSION_FUNCTION (COMPLEX32, COMPLEX8, REAL4, CONVERT)
#endif
@@ -97,12 +107,10 @@ static int PUGHSlabi_PrecisionVarType (int type);
@routine PUGHSlabi_GetDatatypeConversionFn
@date Fri 23 Nov 2000
@author Thomas Radke
- @desc
+ @desc
Finds a predefined datatype conversion function.
- @enddesc
+ @enddesc
- @calls PUGHSlab_REAL8_to_REAL4
-
@var src_type
@vdesc CCTK datatype of the source
@vtype int
@@ -138,55 +146,55 @@ t_hslabConversionFn PUGHSlabi_GetDatatypeConversionFn (int src_type,
#if defined(CCTK_INT2) && defined(CCTK_INT4)
else if (src_type == CCTK_VARIABLE_INT4 && dst_type == CCTK_VARIABLE_INT2)
{
- retval = Convert_CCTK_INT4_to_CCTK_INT2;
+ retval = ConvertINT4toINT2;
}
#endif
#if defined(CCTK_INT2) && defined(CCTK_INT8)
else if (src_type == CCTK_VARIABLE_INT8 && dst_type == CCTK_VARIABLE_INT2)
{
- retval = Convert_CCTK_INT8_to_CCTK_INT2;
+ retval = ConvertINT8toINT2;
}
#endif
#if defined(CCTK_INT4) && defined(CCTK_INT8)
else if (src_type == CCTK_VARIABLE_INT8 && dst_type == CCTK_VARIABLE_INT4)
{
- retval = Convert_CCTK_INT8_to_CCTK_INT4;
+ retval = ConvertINT8toINT4;
}
#endif
#if defined(CCTK_REAL4) && defined(CCTK_REAL8)
else if (src_type == CCTK_VARIABLE_REAL8 && dst_type == CCTK_VARIABLE_REAL4)
{
- retval = Convert_CCTK_REAL8_to_CCTK_REAL4;
+ retval = ConvertREAL8toREAL4;
}
#endif
#if defined(CCTK_REAL4) && defined(CCTK_REAL16)
else if (src_type == CCTK_VARIABLE_REAL16 && dst_type == CCTK_VARIABLE_REAL4)
{
- retval = Convert_CCTK_REAL16_to_CCTK_REAL4;
+ retval = ConvertREAL16toREAL4;
}
#endif
#if defined(CCTK_REAL8) && defined(CCTK_REAL16)
else if (src_type == CCTK_VARIABLE_REAL16 && dst_type == CCTK_VARIABLE_REAL8)
{
- retval = Convert_CCTK_REAL16_to_CCTK_REAL8;
+ retval = ConvertREAL16toREAL8;
}
#endif
#if defined(CCTK_REAL4) && defined(CCTK_REAL8)
else if (src_type == CCTK_VARIABLE_COMPLEX16 && dst_type == CCTK_VARIABLE_COMPLEX8)
{
- retval = Convert_CCTK_COMPLEX16_to_CCTK_COMPLEX8;
+ retval = ConvertCOMPLEX16toCOMPLEX8;
}
#endif
#if defined(CCTK_REAL8) && defined(CCTK_REAL16)
else if (src_type == CCTK_VARIABLE_COMPLEX32 && dst_type == CCTK_VARIABLE_COMPLEX8)
{
- retval = Convert_CCTK_COMPLEX32_to_CCTK_COMPLEX8;
+ retval = ConvertCOMPLEX32toCOMPLEX8;
}
#endif
#if defined(CCTK_REAL8) && defined(CCTK_REAL16)
else if (src_type == CCTK_VARIABLE_COMPLEX32 && dst_type == CCTK_VARIABLE_COMPLEX16)
{
- retval = Convert_CCTK_COMPLEX32_to_CCTK_COMPLEX16;
+ retval = ConvertCOMPLEX32toCOMPLEX16;
}
#endif
else