diff options
Diffstat (limited to 'src/H5Zscaleoffset.c')
-rw-r--r-- | src/H5Zscaleoffset.c | 129 |
1 files changed, 66 insertions, 63 deletions
diff --git a/src/H5Zscaleoffset.c b/src/H5Zscaleoffset.c index 4f35fe3..6ef559e 100644 --- a/src/H5Zscaleoffset.c +++ b/src/H5Zscaleoffset.c @@ -255,7 +255,7 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ /* Get the fill value for integer type */ #define H5Z_scaleoffset_get_filval_1(type, cd_values, fill_val) \ - { \ + do { \ unsigned _i = H5Z_SCALEOFFSET_PARM_FILVAL; /* index into cd_values */ \ uint32_t _cd_value; /* Current cd_value */ \ char *_fv_p; /* Pointer to current byte in fill_val */ \ @@ -319,15 +319,16 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ H5MM_memcpy(_fv_p, (char *)&_cd_value + 4 - _size_rem, _size_rem); \ } /* end if */ \ } /* end else */ \ - } + } while (0) /* Get the fill value for floating-point type */ #define H5Z_scaleoffset_get_filval_2(type, cd_values, filval) \ - { \ + do { \ if (sizeof(type) <= sizeof(long long)) \ - H5Z_scaleoffset_get_filval_1(type, cd_values, filval) else HGOTO_ERROR( \ - H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer datatype") \ - } + H5Z_scaleoffset_get_filval_1(type, cd_values, filval); \ + else \ + HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer datatype") \ + } while (0) /* Find maximum and minimum values of a buffer with fill value defined for integer type */ #define H5Z_scaleoffset_max_min_1(i, d_nelmts, buf, filval, max, min) \ @@ -455,32 +456,32 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ unsigned i; \ \ if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) { /* fill value defined */ \ - H5Z_scaleoffset_get_filval_1(type, cd_values, \ - filval) if (*minbits == H5Z_SO_INT_MINBITS_DEFAULT) \ - { /* minbits not set yet, calculate max, min, and minbits */ \ + H5Z_scaleoffset_get_filval_1(type, cd_values, filval); \ + if (*minbits == \ + H5Z_SO_INT_MINBITS_DEFAULT) { /* minbits not set yet, calculate max, min, and minbits */ \ H5Z_scaleoffset_max_min_1(i, d_nelmts, buf, filval, max, min) \ H5Z_scaleoffset_check_1(type, max, min, minbits) span = (type)(max - min + 1); \ *minbits = H5Z__scaleoffset_log2((unsigned long long)(span + 1)); \ } \ else /* minbits already set, only calculate min */ \ - H5Z_scaleoffset_min_1( \ - i, d_nelmts, buf, filval, \ - min) if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ - for (i = 0; i < d_nelmts; i++) buf[i] = \ - (type)((buf[i] == filval) ? (((type)1 << *minbits) - 1) : (buf[i] - min)); \ + H5Z_scaleoffset_min_1(i, d_nelmts, buf, filval, min); \ + if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ + for (i = 0; i < d_nelmts; i++) \ + buf[i] = (type)((buf[i] == filval) ? (((type)1 << *minbits) - 1) : (buf[i] - min)); \ } \ else { /* fill value undefined */ \ if (*minbits == \ H5Z_SO_INT_MINBITS_DEFAULT) { /* minbits not set yet, calculate max, min, and minbits */ \ - H5Z_scaleoffset_max_min_2(i, d_nelmts, buf, max, min) \ - H5Z_scaleoffset_check_1(type, max, min, minbits) span = (type)(max - min + 1); \ + H5Z_scaleoffset_max_min_2(i, d_nelmts, buf, max, min); \ + H5Z_scaleoffset_check_1(type, max, min, minbits); \ + span = (type)(max - min + 1); \ *minbits = H5Z__scaleoffset_log2((unsigned long long)span); \ } \ else /* minbits already set, only calculate min */ \ - H5Z_scaleoffset_min_2( \ - i, d_nelmts, buf, \ - min) if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ - for (i = 0; i < d_nelmts; i++) buf[i] = (type)(buf[i] - min); \ + H5Z_scaleoffset_min_2(i, d_nelmts, buf, min); \ + if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ + for (i = 0; i < d_nelmts; i++) \ + buf[i] = (type)(buf[i] - min); \ } \ *minval = min; \ } while (0) @@ -493,20 +494,19 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ unsigned i; \ \ if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) { /* fill value defined */ \ - H5Z_scaleoffset_get_filval_1(type, cd_values, \ - filval) if (*minbits == H5Z_SO_INT_MINBITS_DEFAULT) \ - { /* minbits not set yet, calculate max, min, and minbits */ \ + H5Z_scaleoffset_get_filval_1(type, cd_values, filval); \ + if (*minbits == \ + H5Z_SO_INT_MINBITS_DEFAULT) { /* minbits not set yet, calculate max, min, and minbits */ \ H5Z_scaleoffset_max_min_1(i, d_nelmts, buf, filval, max, min) \ H5Z_scaleoffset_check_2(type, max, min, minbits) span = (unsigned type)(max - min + 1); \ *minbits = H5Z__scaleoffset_log2((unsigned long long)(span + 1)); \ } \ else /* minbits already set, only calculate min */ \ - H5Z_scaleoffset_min_1( \ - i, d_nelmts, buf, filval, \ - min) if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ - for (i = 0; i < d_nelmts; i++) buf[i] = \ - (type)((buf[i] == filval) ? (type)(((unsigned type)1 << *minbits) - 1) \ - : (buf[i] - min)); \ + H5Z_scaleoffset_min_1(i, d_nelmts, buf, filval, min); \ + if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ + for (i = 0; i < d_nelmts; i++) \ + buf[i] = (type)((buf[i] == filval) ? (type)(((unsigned type)1 << *minbits) - 1) \ + : (buf[i] - min)); \ } \ else { /* fill value undefined */ \ if (*minbits == \ @@ -603,29 +603,29 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ \ *minval = 0; \ if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) { /* fill value defined */ \ - H5Z_scaleoffset_get_filval_2(type, cd_values, filval) \ - H5Z_scaleoffset_max_min_3(i, d_nelmts, buf, filval, max, min, D_val) \ - H5Z_scaleoffset_check_3(i, type, pow_fun, round_fun, max, min, minbits, D_val) span = \ - (unsigned long long)(llround_fun(max * pow_fun((type)10, (type)D_val) - \ - min * pow_fun((type)10, (type)D_val)) + \ - 1); \ + H5Z_scaleoffset_get_filval_2(type, cd_values, filval); \ + H5Z_scaleoffset_max_min_3(i, d_nelmts, buf, filval, max, min, D_val); \ + H5Z_scaleoffset_check_3(i, type, pow_fun, round_fun, max, min, minbits, D_val); \ + span = (unsigned long long)(llround_fun(max * pow_fun((type)10, (type)D_val) - \ + min * pow_fun((type)10, (type)D_val)) + \ + 1); \ *minbits = H5Z__scaleoffset_log2(span + 1); \ if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ H5Z_scaleoffset_modify_1(i, type, pow_fun, abs_fun, lround_fun, llround_fun, buf, d_nelmts, \ - filval, minbits, min, D_val) \ + filval, minbits, min, D_val); \ } \ else { /* fill value undefined */ \ - H5Z_scaleoffset_max_min_2(i, d_nelmts, buf, max, min) \ - H5Z_scaleoffset_check_3(i, type, pow_fun, round_fun, max, min, minbits, D_val) span = \ - (unsigned long long)(llround_fun(max * pow_fun((type)10, (type)D_val) - \ - min * pow_fun((type)10, (type)D_val)) + \ - 1); \ + H5Z_scaleoffset_max_min_2(i, d_nelmts, buf, max, min); \ + H5Z_scaleoffset_check_3(i, type, pow_fun, round_fun, max, min, minbits, D_val); \ + span = (unsigned long long)(llround_fun(max * pow_fun((type)10, (type)D_val) - \ + min * pow_fun((type)10, (type)D_val)) + \ + 1); \ *minbits = H5Z__scaleoffset_log2(span); \ if (*minbits != sizeof(type) * 8) /* change values if minbits != full precision */ \ H5Z_scaleoffset_modify_2(i, type, pow_fun, lround_fun, llround_fun, buf, d_nelmts, min, \ - D_val) \ + D_val); \ } \ - H5Z_scaleoffset_save_min(i, type, minval, min) \ + H5Z_scaleoffset_save_min(i, type, minval, min); \ } while (0) /* Postdecompress for unsigned integer type */ @@ -635,8 +635,9 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ unsigned i; \ \ if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) { /* fill value defined */ \ - H5Z_scaleoffset_get_filval_1(type, cd_values, filval) for (i = 0; i < d_nelmts; i++) buf[i] = \ - (type)((buf[i] == (((type)1 << minbits) - 1)) ? filval : (buf[i] + minval)); \ + H5Z_scaleoffset_get_filval_1(type, cd_values, filval); \ + for (i = 0; i < d_nelmts; i++) \ + buf[i] = (type)((buf[i] == (((type)1 << minbits) - 1)) ? filval : (buf[i] + minval)); \ } \ else /* fill value undefined */ \ for (i = 0; i < d_nelmts; i++) \ @@ -650,9 +651,11 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ unsigned i; \ \ if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) { /* fill value defined */ \ - H5Z_scaleoffset_get_filval_1(type, cd_values, filval) for (i = 0; i < d_nelmts; i++) buf[i] = \ - (type)(((unsigned type)buf[i] == (((unsigned type)1 << minbits) - 1)) ? filval \ - : (buf[i] + minval)); \ + H5Z_scaleoffset_get_filval_1(type, cd_values, filval); \ + for (i = 0; i < d_nelmts; i++) \ + buf[i] = (type)(((unsigned type)buf[i] == (((unsigned type)1 << minbits) - 1)) \ + ? filval \ + : (buf[i] + minval)); \ } \ else /* fill value undefined */ \ for (i = 0; i < d_nelmts; i++) \ @@ -661,7 +664,7 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ /* Retrieve minimum value of floating-point type */ #define H5Z_scaleoffset_get_min(type, minval, min) \ - { \ + do { \ if (sizeof(type) <= sizeof(long long)) \ /* retrieve min value from corresponding position \ * byte-order has already been swapped as appropriate, but be sure to \ @@ -675,11 +678,11 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ } /* end else */ \ else \ HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer datatype") \ - } + } while (0) /* Modify values of data in postdecompression if fill value defined for floating-point type */ #define H5Z_scaleoffset_modify_3(i, type, pow_fun, buf, d_nelmts, filval, minbits, min, D_val) \ - { \ + do { \ if (sizeof(type) == sizeof(int)) \ for (i = 0; i < d_nelmts; i++) \ buf[i] = \ @@ -702,11 +705,11 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ min); \ else \ HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer datatype") \ - } + } while (0) /* Modify values of data in postdecompression if fill value undefined for floating-point type */ #define H5Z_scaleoffset_modify_4(i, type, pow_fun, buf, d_nelmts, min, D_val) \ - { \ + do { \ if (sizeof(type) == sizeof(int)) \ for (i = 0; i < d_nelmts; i++) \ buf[i] = ((type)(*(int *)((void *)&buf[i])) / pow_fun((type)10, (type)D_val) + min); \ @@ -718,7 +721,7 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ buf[i] = ((type)(*(long long *)((void *)&buf[i])) / pow_fun((type)10, (type)D_val) + min); \ else \ HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer datatype") \ - } + } while (0) /* Postdecompress for floating-point type using variable-minimum-bits method */ #define H5Z_scaleoffset_postdecompress_3(type, pow_fun, data, d_nelmts, filavail, cd_values, minbits, \ @@ -727,15 +730,14 @@ H5Z_class2_t H5Z_SCALEOFFSET[1] = {{ type *buf = (type *)data, filval = 0, min = 0; \ unsigned i; \ \ - H5Z_scaleoffset_get_min(type, minval, min) \ + H5Z_scaleoffset_get_min(type, minval, min); \ \ - if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) \ - { /* fill value defined */ \ - H5Z_scaleoffset_get_filval_2(type, cd_values, filval) \ - H5Z_scaleoffset_modify_3(i, type, pow_fun, buf, d_nelmts, filval, minbits, min, D_val) \ + if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) { /* fill value defined */ \ + H5Z_scaleoffset_get_filval_2(type, cd_values, filval); \ + H5Z_scaleoffset_modify_3(i, type, pow_fun, buf, d_nelmts, filval, minbits, min, D_val); \ } \ else /* fill value undefined */ \ - H5Z_scaleoffset_modify_4(i, type, pow_fun, buf, d_nelmts, min, D_val) \ + H5Z_scaleoffset_modify_4(i, type, pow_fun, buf, d_nelmts, min, D_val); \ } while (0) /*------------------------------------------------------------------------- @@ -1538,9 +1540,10 @@ H5Z__scaleoffset_postdecompress_i(void *data, unsigned d_nelmts, enum H5Z_scaleo unsigned i; if (filavail == H5Z_SCALEOFFSET_FILL_DEFINED) { /* fill value defined */ - H5Z_scaleoffset_get_filval_1(signed char, cd_values, filval) for (i = 0; i < d_nelmts; - i++) buf[i] = - (signed char)((buf[i] == (((unsigned char)1 << minbits) - 1)) ? filval : (buf[i] + sminval)); + H5Z_scaleoffset_get_filval_1(signed char, cd_values, filval); + for (i = 0; i < d_nelmts; i++) + buf[i] = (signed char)((buf[i] == (((unsigned char)1 << minbits) - 1)) ? filval + : (buf[i] + sminval)); } else /* fill value undefined */ for (i = 0; i < d_nelmts; i++) |