HDF5  1.12.0
Data Structures | Macros | Enumerations | Variables
H5Zscaleoffset.c File Reference
#include "H5Zmodule.h"
#include "H5private.h"
#include "H5ACprivate.h"
#include "H5Eprivate.h"
#include "H5Iprivate.h"
#include "H5MMprivate.h"
#include "H5Pprivate.h"
#include "H5Oprivate.h"
#include "H5Sprivate.h"
#include "H5Tprivate.h"
#include "H5Zpkg.h"

Data Structures

struct  parms_atomic
 

Macros

#define H5Z_SCALEOFFSET_TOTAL_NPARMS   20 /* Total number of parameters for filter */
 
#define H5Z_SCALEOFFSET_PARM_SCALETYPE   0 /* "User" parameter for scale type */
 
#define H5Z_SCALEOFFSET_PARM_SCALEFACTOR   1 /* "User" parameter for scale factor */
 
#define H5Z_SCALEOFFSET_PARM_NELMTS   2 /* "Local" parameter for number of elements in the chunk */
 
#define H5Z_SCALEOFFSET_PARM_CLASS   3 /* "Local" parameter for datatype class */
 
#define H5Z_SCALEOFFSET_PARM_SIZE   4 /* "Local" parameter for datatype size */
 
#define H5Z_SCALEOFFSET_PARM_SIGN   5 /* "Local" parameter for integer datatype sign */
 
#define H5Z_SCALEOFFSET_PARM_ORDER   6 /* "Local" parameter for datatype byte order */
 
#define H5Z_SCALEOFFSET_PARM_FILAVAIL   7 /* "Local" parameter for dataset fill value existence */
 
#define H5Z_SCALEOFFSET_PARM_FILVAL   8 /* "Local" parameter for start location to store dataset fill value */
 
#define H5Z_SCALEOFFSET_CLS_INTEGER   0 /* Integer (datatype class) */
 
#define H5Z_SCALEOFFSET_CLS_FLOAT   1 /* Floatig-point (datatype class) */
 
#define H5Z_SCALEOFFSET_SGN_NONE   0 /* Unsigned integer type */
 
#define H5Z_SCALEOFFSET_SGN_2   1 /* Two's complement signed integer type */
 
#define H5Z_SCALEOFFSET_ORDER_LE   0 /* Little endian (datatype byte order) */
 
#define H5Z_SCALEOFFSET_ORDER_BE   1 /* Big endian (datatype byte order) */
 
#define H5Z_SCALEOFFSET_FILL_UNDEFINED   0 /* Fill value is not defined */
 
#define H5Z_SCALEOFFSET_FILL_DEFINED   1 /* Fill value is defined */
 
#define H5Z_scaleoffset_save_filval(type, cd_values, fill_val)
 
#define H5Z_scaleoffset_set_filval_1(type, dcpl_plist, dt, cd_values, need_convert)
 
#define H5Z_scaleoffset_set_filval_2(type, dcpl_plist, dt, cd_values, need_convert)
 
#define H5Z_scaleoffset_set_filval_3(type, dcpl_plist, dt, cd_values, need_convert)
 
#define H5Z_scaleoffset_set_filval_4(type, dcpl_plist, dt, cd_values, need_convert)
 
#define H5Z_scaleoffset_get_filval_1(type, cd_values, fill_val)
 
#define H5Z_scaleoffset_get_filval_2(type, cd_values, filval)
 
#define H5Z_scaleoffset_max_min_1(i, d_nelmts, buf, filval, max, min)
 
#define H5Z_scaleoffset_max_min_2(i, d_nelmts, buf, max, min)
 
#define H5Z_scaleoffset_max_min_3(i, d_nelmts, buf, filval, max, min, D_val)
 
#define H5Z_scaleoffset_min_1(i, d_nelmts, buf, filval, min)
 
#define H5Z_scaleoffset_min_2(i, d_nelmts, buf, min)
 
#define H5Z_scaleoffset_check_1(type, max, min, minbits)
 
#define H5Z_scaleoffset_check_2(type, max, min, minbits)
 
#define H5Z_scaleoffset_check_3(i, type, pow_fun, round_fun, max, min, minbits, D_val)
 
#define H5Z_scaleoffset_precompress_1(type, data, d_nelmts, filavail, cd_values, minbits, minval)
 
#define H5Z_scaleoffset_precompress_2(type, data, d_nelmts, filavail, cd_values, minbits, minval)
 
#define H5Z_scaleoffset_modify_1(i, type, pow_fun, abs_fun, lround_fun, llround_fun, buf, d_nelmts, filval, minbits, min, D_val)
 
#define H5Z_scaleoffset_modify_2(i, type, pow_fun, lround_fun, llround_fun, buf, d_nelmts, min, D_val)
 
#define H5Z_scaleoffset_save_min(i, type, minval, min)
 
#define H5Z_scaleoffset_precompress_3(type, pow_fun, abs_fun, round_fun, lround_fun, llround_fun, data, d_nelmts, filavail, cd_values, minbits, minval, D_val)
 
#define H5Z_scaleoffset_postdecompress_1(type, data, d_nelmts, filavail, cd_values, minbits, minval)
 
#define H5Z_scaleoffset_postdecompress_2(type, data, d_nelmts, filavail, cd_values, minbits, minval)
 
#define H5Z_scaleoffset_get_min(type, minval, min)
 
#define H5Z_scaleoffset_modify_3(i, type, pow_fun, buf, d_nelmts, filval, minbits, min, D_val)
 
#define H5Z_scaleoffset_modify_4(i, type, pow_fun, buf, d_nelmts, min, D_val)
 
#define H5Z_scaleoffset_postdecompress_3(type, pow_fun, data, d_nelmts, filavail, cd_values, minbits, minval, D_val)
 

Enumerations

enum  H5Z_scaleoffset_t {
  t_bad =0, t_uchar =1, t_ushort, t_uint,
  t_ulong, t_ulong_long, t_schar, t_short,
  t_int, t_long, t_long_long, t_float,
  t_double
}
 

Variables

H5Z_class2_t H5Z_SCALEOFFSET [1]
 

Macro Definition Documentation

◆ H5Z_scaleoffset_check_1

#define H5Z_scaleoffset_check_1 (   type,
  max,
  min,
  minbits 
)
Value:
{ \
if(max - min > (type)(~(type)0 - 2)) \
{ *minbits = sizeof(type)*8; return; } \
}

◆ H5Z_scaleoffset_check_2

#define H5Z_scaleoffset_check_2 (   type,
  max,
  min,
  minbits 
)
Value:
{ \
if((unsigned type)(max - min) > (unsigned type)(~(unsigned type)0 - 2)) \
{ *minbits = sizeof(type)*8; return; } \
}

◆ H5Z_scaleoffset_check_3

#define H5Z_scaleoffset_check_3 (   i,
  type,
  pow_fun,
  round_fun,
  max,
  min,
  minbits,
  D_val 
)
Value:
{ \
if(sizeof(type) == sizeof(int)) { \
if(round_fun(max * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)) \
> pow_fun(2.0f, (type)(sizeof(int) * 8 - 1))) { \
*minbits = sizeof(int) * 8; \
goto done; \
} \
} else if(sizeof(type) == sizeof(long)) { \
if(round_fun(max * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)) \
> pow_fun(2.0f, (type)(sizeof(long) * 8 - 1))) { \
*minbits = sizeof(long) * 8; \
goto done; \
} \
} else if(sizeof(type) == sizeof(long long)) { \
if(round_fun(max * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)) \
> pow_fun(2.0f, (type)(sizeof(long long) * 8 - 1))) { \
*minbits = sizeof(long long) * 8; \
goto done; \
} \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_SCALEOFFSET_CLS_FLOAT

#define H5Z_SCALEOFFSET_CLS_FLOAT   1 /* Floatig-point (datatype class) */

◆ H5Z_SCALEOFFSET_CLS_INTEGER

#define H5Z_SCALEOFFSET_CLS_INTEGER   0 /* Integer (datatype class) */

◆ H5Z_SCALEOFFSET_FILL_DEFINED

#define H5Z_SCALEOFFSET_FILL_DEFINED   1 /* Fill value is defined */

◆ H5Z_SCALEOFFSET_FILL_UNDEFINED

#define H5Z_SCALEOFFSET_FILL_UNDEFINED   0 /* Fill value is not defined */

◆ H5Z_scaleoffset_get_filval_1

#define H5Z_scaleoffset_get_filval_1 (   type,
  cd_values,
  fill_val 
)

◆ H5Z_scaleoffset_get_filval_2

#define H5Z_scaleoffset_get_filval_2 (   type,
  cd_values,
  filval 
)
Value:
{ \
if(sizeof(type) <= sizeof(long long)) \
H5Z_scaleoffset_get_filval_1(type, cd_values, filval) \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_scaleoffset_get_min

#define H5Z_scaleoffset_get_min (   type,
  minval,
  min 
)
Value:
{ \
if(sizeof(type) <= sizeof(long long)) \
/* retrieve min value from corresponding position \
* byte-order has already been swapped as appropriate, but be sure to \
* account for offset in BE if sizes differ \
*/ \
H5MM_memcpy(&min, &minval, sizeof(type)); \
else { \
H5MM_memcpy(&min, ((char *)&minval) + (sizeof(long long) \
- sizeof(type)), sizeof(type)); \
} /* end else */ \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_scaleoffset_max_min_1

#define H5Z_scaleoffset_max_min_1 (   i,
  d_nelmts,
  buf,
  filval,
  max,
  min 
)
Value:
{ \
i = 0; while(i < d_nelmts && buf[i]== filval) i++; \
if(i < d_nelmts) min = max = buf[i]; \
for(; i < d_nelmts; i++) { \
if(buf[i] == filval) continue; /* ignore fill value */ \
if(buf[i] > max) max = buf[i]; \
if(buf[i] < min) min = buf[i]; \
} \
}

◆ H5Z_scaleoffset_max_min_2

#define H5Z_scaleoffset_max_min_2 (   i,
  d_nelmts,
  buf,
  max,
  min 
)
Value:
{ \
min = max = buf[0]; \
for(i = 0; i < d_nelmts; i++) { \
if(buf[i] > max) max = buf[i]; \
if(buf[i] < min) min = buf[i]; \
} \
}

◆ H5Z_scaleoffset_max_min_3

#define H5Z_scaleoffset_max_min_3 (   i,
  d_nelmts,
  buf,
  filval,
  max,
  min,
  D_val 
)
Value:
{ \
i = 0; while(i < d_nelmts && HDfabs(buf[i] - filval) < HDpow(10.0f, -D_val)) i++; \
if(i < d_nelmts) min = max = buf[i]; \
for(; i < d_nelmts; i++) { \
if(HDfabs(buf[i] - filval) < HDpow(10.0f, -D_val)) \
continue; /* ignore fill value */ \
if(buf[i] > max) max = buf[i]; \
if(buf[i] < min) min = buf[i]; \
} \
}

◆ H5Z_scaleoffset_min_1

#define H5Z_scaleoffset_min_1 (   i,
  d_nelmts,
  buf,
  filval,
  min 
)
Value:
{ \
i = 0; while(i < d_nelmts && buf[i]== filval) i++; \
if(i < d_nelmts) min = buf[i]; \
for(; i < d_nelmts; i++) { \
if(buf[i] == filval) continue; /* ignore fill value */ \
if(buf[i] < min) min = buf[i]; \
} \
}

◆ H5Z_scaleoffset_min_2

#define H5Z_scaleoffset_min_2 (   i,
  d_nelmts,
  buf,
  min 
)
Value:
{ \
min = buf[0]; \
for(i = 0; i < d_nelmts; i++) \
if(buf[i] < min) min = buf[i]; \
}

◆ H5Z_scaleoffset_modify_1

#define H5Z_scaleoffset_modify_1 (   i,
  type,
  pow_fun,
  abs_fun,
  lround_fun,
  llround_fun,
  buf,
  d_nelmts,
  filval,
  minbits,
  min,
  D_val 
)
Value:
{ \
if(sizeof(type) == sizeof(int)) \
for(i = 0; i < d_nelmts; i++) { \
if(abs_fun(buf[i] - filval) < pow_fun(10.0f, (type)-D_val)) \
*(int *)((void *)&buf[i]) = (int)(((unsigned int)1 << *minbits) - 1); \
else \
*(int *)((void *)&buf[i]) = (int)lround_fun(buf[i] * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)); \
} \
else if(sizeof(type) == sizeof(long)) \
for(i = 0; i < d_nelmts; i++) { \
if(abs_fun(buf[i] - filval) < pow_fun(10.0f, (type)-D_val)) \
*(long *)((void *)&buf[i]) = (long)(((unsigned long)1 << *minbits) - 1); \
else \
*(long *)((void *)&buf[i]) = lround_fun(buf[i] * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)); \
} \
else if(sizeof(type) == sizeof(long long)) \
for(i = 0; i < d_nelmts; i++) { \
if(abs_fun(buf[i] - filval) < pow_fun(10.0f, (type)-D_val)) \
*(long long *)((void *)&buf[i]) = (long long)(((unsigned long long)1 << *minbits) - 1); \
else \
*(long long *)((void *)&buf[i]) = llround_fun(buf[i] * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)); \
} \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_scaleoffset_modify_2

#define H5Z_scaleoffset_modify_2 (   i,
  type,
  pow_fun,
  lround_fun,
  llround_fun,
  buf,
  d_nelmts,
  min,
  D_val 
)
Value:
{ \
if(sizeof(type) == sizeof(int)) \
for(i = 0; i < d_nelmts; i++) \
*(int *)((void *)&buf[i]) = (int)lround_fun(buf[i] * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)); \
else if(sizeof(type) == sizeof(long)) \
for(i = 0; i < d_nelmts; i++) \
*(long *)((void *)&buf[i]) = lround_fun(buf[i] * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)); \
else if(sizeof(type) == sizeof(long long)) \
for(i = 0; i < d_nelmts; i++) \
*(long long *)((void *)&buf[i]) = llround_fun(buf[i] * pow_fun(10.0f, (type)D_val) - min * pow_fun(10.0f, (type)D_val)); \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_scaleoffset_modify_3

#define H5Z_scaleoffset_modify_3 (   i,
  type,
  pow_fun,
  buf,
  d_nelmts,
  filval,
  minbits,
  min,
  D_val 
)
Value:
{ \
if(sizeof(type) == sizeof(int)) \
for(i = 0; i < d_nelmts; i++) \
buf[i] = (type)((*(int *)((void *)&buf[i]) == (int)(((unsigned int)1 << minbits) - 1)) ? \
filval : (type)(*(int *)((void *)&buf[i])) / pow_fun(10.0f, (type)D_val) + min); \
else if(sizeof(type) == sizeof(long)) \
for(i = 0; i < d_nelmts; i++) \
buf[i] = (type)((*(long *)((void *)&buf[i]) == (long)(((unsigned long)1 << minbits) - 1)) ? \
filval : (type)(*(long *)((void *)&buf[i])) / pow_fun(10.0f, (type)D_val) + min); \
else if(sizeof(type) == sizeof(long long)) \
for(i = 0; i < d_nelmts; i++) \
buf[i] = (type)((*(long long *)((void *)&buf[i]) == (long long)(((unsigned long long)1 << minbits) - 1)) ? \
filval : (type)(*(long long *)((void *)&buf[i])) / pow_fun(10.0f, (type)D_val) + min); \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_scaleoffset_modify_4

#define H5Z_scaleoffset_modify_4 (   i,
  type,
  pow_fun,
  buf,
  d_nelmts,
  min,
  D_val 
)
Value:
{ \
if(sizeof(type)==sizeof(int)) \
for(i = 0; i < d_nelmts; i++) \
buf[i] = ((type)(*(int *)((void *)&buf[i])) / pow_fun(10.0f, (type)D_val) + min); \
else if(sizeof(type)==sizeof(long)) \
for(i = 0; i < d_nelmts; i++) \
buf[i] = ((type)(*(long *)((void *)&buf[i])) / pow_fun(10.0f, (type)D_val) + min); \
else if(sizeof(type)==sizeof(long long)) \
for(i = 0; i < d_nelmts; i++) \
buf[i] = ((type)(*(long long *)((void *)&buf[i])) / pow_fun(10.0f, (type)D_val) + min); \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_SCALEOFFSET_ORDER_BE

#define H5Z_SCALEOFFSET_ORDER_BE   1 /* Big endian (datatype byte order) */

◆ H5Z_SCALEOFFSET_ORDER_LE

#define H5Z_SCALEOFFSET_ORDER_LE   0 /* Little endian (datatype byte order) */

◆ H5Z_SCALEOFFSET_PARM_CLASS

#define H5Z_SCALEOFFSET_PARM_CLASS   3 /* "Local" parameter for datatype class */

◆ H5Z_SCALEOFFSET_PARM_FILAVAIL

#define H5Z_SCALEOFFSET_PARM_FILAVAIL   7 /* "Local" parameter for dataset fill value existence */

◆ H5Z_SCALEOFFSET_PARM_FILVAL

#define H5Z_SCALEOFFSET_PARM_FILVAL   8 /* "Local" parameter for start location to store dataset fill value */

◆ H5Z_SCALEOFFSET_PARM_NELMTS

#define H5Z_SCALEOFFSET_PARM_NELMTS   2 /* "Local" parameter for number of elements in the chunk */

◆ H5Z_SCALEOFFSET_PARM_ORDER

#define H5Z_SCALEOFFSET_PARM_ORDER   6 /* "Local" parameter for datatype byte order */

◆ H5Z_SCALEOFFSET_PARM_SCALEFACTOR

#define H5Z_SCALEOFFSET_PARM_SCALEFACTOR   1 /* "User" parameter for scale factor */

◆ H5Z_SCALEOFFSET_PARM_SCALETYPE

#define H5Z_SCALEOFFSET_PARM_SCALETYPE   0 /* "User" parameter for scale type */

◆ H5Z_SCALEOFFSET_PARM_SIGN

#define H5Z_SCALEOFFSET_PARM_SIGN   5 /* "Local" parameter for integer datatype sign */

◆ H5Z_SCALEOFFSET_PARM_SIZE

#define H5Z_SCALEOFFSET_PARM_SIZE   4 /* "Local" parameter for datatype size */

◆ H5Z_scaleoffset_postdecompress_1

#define H5Z_scaleoffset_postdecompress_1 (   type,
  data,
  d_nelmts,
  filavail,
  cd_values,
  minbits,
  minval 
)
Value:
{ \
type *buf = (type *)data, filval = 0; 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)); \
} else /* fill value undefined */ \
for(i = 0; i < d_nelmts; i++) buf[i] = (type)(buf[i] + (type)(minval)); \
}

◆ H5Z_scaleoffset_postdecompress_2

#define H5Z_scaleoffset_postdecompress_2 (   type,
  data,
  d_nelmts,
  filavail,
  cd_values,
  minbits,
  minval 
)
Value:
{ \
type *buf = (type *)data, filval = 0; \
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));\
} else /* fill value undefined */ \
for(i = 0; i < d_nelmts; i++) \
buf[i] = (type)(buf[i] + (type)(minval)); \
}

◆ H5Z_scaleoffset_postdecompress_3

#define H5Z_scaleoffset_postdecompress_3 (   type,
  pow_fun,
  data,
  d_nelmts,
  filavail,
  cd_values,
  minbits,
  minval,
  D_val 
)
Value:
{ \
type *buf = (type *)data, filval = 0, min = 0; \
unsigned i; \
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) \
} else /* fill value undefined */ \
H5Z_scaleoffset_modify_4(i, type, pow_fun, buf, d_nelmts, min, D_val) \
}

◆ H5Z_scaleoffset_precompress_1

#define H5Z_scaleoffset_precompress_1 (   type,
  data,
  d_nelmts,
  filavail,
  cd_values,
  minbits,
  minval 
)
Value:
{ \
type *buf = (type *)data, min = 0, max = 0, span, filval = 0; \
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_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)); \
} 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); \
*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); \
} \
*minval = min; \
}

◆ H5Z_scaleoffset_precompress_2

#define H5Z_scaleoffset_precompress_2 (   type,
  data,
  d_nelmts,
  filavail,
  cd_values,
  minbits,
  minval 
)
Value:
{ \
type *buf = (type *)data, min = 0, max = 0, filval = 0; \
unsigned type span; 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_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)); \
} 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_2(type, max, min, minbits) \
span = (unsigned 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); \
} \
*minval = (unsigned long long)min; \
}

◆ H5Z_scaleoffset_precompress_3

#define H5Z_scaleoffset_precompress_3 (   type,
  pow_fun,
  abs_fun,
  round_fun,
  lround_fun,
  llround_fun,
  data,
  d_nelmts,
  filavail,
  cd_values,
  minbits,
  minval,
  D_val 
)
Value:
{ \
type *buf = (type *)data, min = 0, max = 0, filval = 0; \
unsigned long long span; \
unsigned i; \
\
*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(10.0f, (type)D_val) - min * pow_fun(10.0f, (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) \
} 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(10.0f, (type)D_val) - min * pow_fun(10.0f, (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) \
} \
H5Z_scaleoffset_save_min(i, type, minval, min) \
}

◆ H5Z_scaleoffset_save_filval

#define H5Z_scaleoffset_save_filval (   type,
  cd_values,
  fill_val 
)

◆ H5Z_scaleoffset_save_min

#define H5Z_scaleoffset_save_min (   i,
  type,
  minval,
  min 
)
Value:
{ \
if(sizeof(type) <= sizeof(long long)) \
/* Save min value to corresponding position \
* byte-order will be swapped as appropriate, but be sure to \
* account for offset in BE if sizes differ \
*/ \
H5MM_memcpy(minval, &min, sizeof(type)); \
else { \
H5MM_memcpy(((char *)minval) + (sizeof(long long) - sizeof(type)), \
&min, sizeof(type)); \
} /* end else */ \
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot find matched integer dataype") \
}

◆ H5Z_scaleoffset_set_filval_1

#define H5Z_scaleoffset_set_filval_1 (   type,
  dcpl_plist,
  dt,
  cd_values,
  need_convert 
)
Value:
{ \
type fill_val; \
\
/* Get dataset fill value */ \
if(H5P_get_fill_value(dcpl_plist, dt, &fill_val) < 0) \
HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "unable to get fill value") \
if(need_convert) \
H5Z_scaleoffset_convert(&fill_val, 1, sizeof(type)); \
H5Z_scaleoffset_save_filval(type, cd_values, fill_val) \
}

◆ H5Z_scaleoffset_set_filval_2

#define H5Z_scaleoffset_set_filval_2 (   type,
  dcpl_plist,
  dt,
  cd_values,
  need_convert 
)
Value:
{ \
type fill_val; \
\
/* Get dataset fill value */ \
if(H5P_get_fill_value(dcpl_plist, dt, &fill_val) < 0) \
HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "unable to get fill value") \
if(need_convert) \
H5Z_scaleoffset_convert(&fill_val, 1, sizeof(type)); \
H5Z_scaleoffset_save_filval(unsigned type, cd_values, fill_val) \
}

◆ H5Z_scaleoffset_set_filval_3

#define H5Z_scaleoffset_set_filval_3 (   type,
  dcpl_plist,
  dt,
  cd_values,
  need_convert 
)
Value:
{ \
type fill_val; \
\
/* Get dataset fill value */ \
if(H5P_get_fill_value(dcpl_plist, dt, &fill_val) < 0) \
HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "unable to get fill value") \
\
/* Store the fill value as the last entry in cd_values[] */ \
(cd_values)[H5Z_SCALEOFFSET_PARM_FILVAL] = (unsigned)((unsigned char)fill_val); \
}

◆ H5Z_scaleoffset_set_filval_4

#define H5Z_scaleoffset_set_filval_4 (   type,
  dcpl_plist,
  dt,
  cd_values,
  need_convert 
)
Value:
{ \
type fill_val; \
\
/* Get dataset fill value */ \
if(H5P_get_fill_value(dcpl_plist, dt, &fill_val) < 0) \
HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "unable to get fill value") \
if(need_convert) \
H5Z_scaleoffset_convert(&fill_val, 1, sizeof(type)); \
H5Z_scaleoffset_save_filval(type, cd_values, fill_val) \
}

◆ H5Z_SCALEOFFSET_SGN_2

#define H5Z_SCALEOFFSET_SGN_2   1 /* Two's complement signed integer type */

◆ H5Z_SCALEOFFSET_SGN_NONE

#define H5Z_SCALEOFFSET_SGN_NONE   0 /* Unsigned integer type */

◆ H5Z_SCALEOFFSET_TOTAL_NPARMS

#define H5Z_SCALEOFFSET_TOTAL_NPARMS   20 /* Total number of parameters for filter */

Enumeration Type Documentation

◆ H5Z_scaleoffset_t

Enumerator
t_bad 
t_uchar 
t_ushort 
t_uint 
t_ulong 
t_ulong_long 
t_schar 
t_short 
t_int 
t_long 
t_long_long 
t_float 
t_double 

Variable Documentation

◆ H5Z_SCALEOFFSET

H5Z_class2_t H5Z_SCALEOFFSET[1]
Initial value:
= {{
1,
1,
"scaleoffset",
H5Z_can_apply_scaleoffset,
H5Z_set_local_scaleoffset,
H5Z_filter_scaleoffset,
}}
HGOTO_ERROR
#define HGOTO_ERROR(maj, min, ret_val,...)
Definition: H5Eprivate.h:65
H5P_get_fill_value
herr_t H5P_get_fill_value(H5P_genplist_t *plist, const H5T_t *type, void *value)
Definition: H5Pdcpl.c:3283
f
hdr f
Definition: H5EA.c:755
H5E_CANTGET
Invalid arguments to routine Resource unavailable Internal File accessibility Low level I O Function entry exit Object atom Object cache Links B Tree node Symbol table Heap Object header Datatype Dataspace Dataset Data storage Property lists Attribute Data filters External file list References Virtual File Layer Virtual Object Layer Ternary Search Trees Reference Counted Strings Error API Skip Lists Free Space Manager Shared Object Header Messages Extensible Array Fixed Array Plugin for dynamically loaded library Page Buffering API Context Map No error Argument errors Resource errors File accessibility errors Generic low level file I O errors Function entry exit interface errors Object atom related errors Cache related errors Link related errors B tree related errors Object header related errors Group related errors Datatype conversion errors Dataspace errors Property list errors Parallel MPI errors Heap errors Free space errors I O pipeline errors System level errors Plugin errors No error Information is uinitialized Feature is unsupported Inappropriate type Out of range Bad value No space available for allocation Can t allocate space Unable to copy object Unable to free object Object already exists Unable to lock object Unable to unlock object Unable to garbage collect Unable to compute size Object is already open File already exists File already open Unable to create file Unable to open file Unable to close file Not an HDF5 file Bad file ID accessed File has been truncated File mount error Unable to delete file Seek failed Read failed Write failed Close failed Address overflowed File Unable to initialize object Object already initialized Unable to release object Unable to find atom Unable to find ID group information Unable to register new atom Unable to increment reference count Unable to decrement reference count Out of IDs for group Unable to flush data from cache Unable to mark metadata as unserialized Unable to serialize data from cache Unable to tag metadata in the cache Unable to load metadata into cache Protected metadata error Metadata not currently cached Internal error detected Unable to insert metadata into cache Unable to protect metadata Unable to unprotect metadata Unable to pin cache entry Unable to un pin cache entry Unable to mark a pinned entry as dirty Unable to mark a pinned entry as clean Unable to mark an entry as unserialized Unable to mark an entry as serialized Unable to mark metadata as dirty Unable to mark metadata as clean Unable to expunge a metadata cache entry Unable to resize a metadata cache entry Unable to create a flush dependency Unable to destroy a flush dependency Unable to notify object about action Failure in the cache logging framework Unable to cork an object Unable to uncork an object Object not found Object already exists Unable to encode value Unable to decode value Unable to split node Unable to redistribute records Unable to swap records Unable to insert object Unable to list node Unable to modify record Unable to remove object Bad object header link count Wrong version number Alignment error Unrecognized message Can t delete message Iteration failed Can t pack messages Can t reset object Unable to rename object Can t open object Can t close object Name component is too long Problem with path to object Can t convert datatypes Bad size for object Can t clip hyperslab region Can t count elements Can t select hyperslab Can t move to next iterator location Invalid selection Can t compare objects Internal states are inconsistent Can t append object H5E_CANTGET
Definition: H5err.txt:235
H5Z_SCALEOFFSET_PARM_FILVAL
#define H5Z_SCALEOFFSET_PARM_FILVAL
Definition: H5Zscaleoffset.c:100
HDfabs
#define HDfabs(X)
Definition: H5private.h:793
H5T_ORDER_BE
@ H5T_ORDER_BE
Definition: H5Tpublic.h:49
H5Z_scaleoffset_save_filval
#define H5Z_scaleoffset_save_filval(type, cd_values, fill_val)
Definition: H5Zscaleoffset.c:115
HDpow
#define HDpow(X, Y)
Definition: H5private.h:1168
long
long
Definition: H5overflow.txt:34
H5Z_CLASS_T_VERS
#define H5Z_CLASS_T_VERS
Definition: H5Zpublic.h:104
int
CATCH int
Definition: H5EA.c:1002
H5Z_SCALEOFFSET_FILL_DEFINED
#define H5Z_SCALEOFFSET_FILL_DEFINED
Definition: H5Zscaleoffset.c:112
FAIL
#define FAIL
Definition: H5private.h:352
H5E_BADTYPE
Invalid arguments to routine Resource unavailable Internal File accessibility Low level I O Function entry exit Object atom Object cache Links B Tree node Symbol table Heap Object header Datatype Dataspace Dataset Data storage Property lists Attribute Data filters External file list References Virtual File Layer Virtual Object Layer Ternary Search Trees Reference Counted Strings Error API Skip Lists Free Space Manager Shared Object Header Messages Extensible Array Fixed Array Plugin for dynamically loaded library Page Buffering API Context Map No error Argument errors Resource errors File accessibility errors Generic low level file I O errors Function entry exit interface errors Object atom related errors Cache related errors Link related errors B tree related errors Object header related errors Group related errors Datatype conversion errors Dataspace errors Property list errors Parallel MPI errors Heap errors Free space errors I O pipeline errors System level errors Plugin errors No error Information is uinitialized Feature is unsupported H5E_BADTYPE
Definition: H5err.txt:112
H5E_PLINE
Invalid arguments to routine Resource unavailable Internal File accessibility Low level I O Function entry exit Object atom Object cache Links B Tree node Symbol table Heap Object header Datatype Dataspace Dataset Data storage Property lists Attribute H5E_PLINE
Definition: H5err.txt:65
H5Z_FILTER_SCALEOFFSET
#define H5Z_FILTER_SCALEOFFSET
Definition: H5Zpublic.h:41
H5T_native_order_g
H5T_order_t H5T_native_order_g
Definition: H5T.c:331
H5Z_scaleoffset_get_min
#define H5Z_scaleoffset_get_min(type, minval, min)
Definition: H5Zscaleoffset.c:572
if
if(NULL==(iblock=H5EA__iblock_protect(hdr, thing_acc)))
Definition: H5EA.c:408
H5T_ORDER_LE
@ H5T_ORDER_LE
Definition: H5Tpublic.h:48
H5Z_SO_INT_MINBITS_DEFAULT
#define H5Z_SO_INT_MINBITS_DEFAULT
Definition: H5Zpublic.h:96