diff options
Diffstat (limited to 'src/DatatypeConversion.c')
-rw-r--r-- | src/DatatypeConversion.c | 102 |
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 |