diff --git a/src/io_properties.h b/src/io_properties.h index 5c69a6ad760e7eb45a1fd5f1eda25a9427f08a4b..17aff20aa9651b060463fe7f6e8152c7db0365ac 100644 --- a/src/io_properties.h +++ b/src/io_properties.h @@ -107,6 +107,9 @@ struct io_props { /* Dimension (1D, 3D, ...) */ int dimension; + /* Has this entry been filled */ + int is_used; + /* Is it compulsory ? (input only) */ enum DATA_IMPORTANCE importance; @@ -126,11 +129,13 @@ struct io_props { enum lossy_compression_schemes lossy_compression; /* Pointer to the start of the temporary buffer used in i/o */ - char *start_temp_c; - int *start_temp_i; - float *start_temp_f; - double *start_temp_d; - long long *start_temp_l; + union { + char *start_temp_c; + int *start_temp_i; + float *start_temp_f; + double *start_temp_d; + long long *start_temp_l; + }; /* Pointer to the engine */ const struct engine *e; @@ -149,35 +154,37 @@ struct io_props { /* Are we converting? */ int conversion; - /* Conversion function for part */ - conversion_func_part_float convert_part_f; - conversion_func_part_int convert_part_i; - conversion_func_part_double convert_part_d; - conversion_func_part_long_long convert_part_l; - - /* Conversion function for gpart */ - conversion_func_gpart_float convert_gpart_f; - conversion_func_gpart_int convert_gpart_i; - conversion_func_gpart_double convert_gpart_d; - conversion_func_gpart_long_long convert_gpart_l; - - /* Conversion function for spart */ - conversion_func_spart_float convert_spart_f; - conversion_func_spart_int convert_spart_i; - conversion_func_spart_double convert_spart_d; - conversion_func_spart_long_long convert_spart_l; - - /* Conversion function for bpart */ - conversion_func_bpart_float convert_bpart_f; - conversion_func_bpart_int convert_bpart_i; - conversion_func_bpart_double convert_bpart_d; - conversion_func_bpart_long_long convert_bpart_l; - - /* Conversion function for sink */ - conversion_func_sink_float convert_sink_f; - conversion_func_sink_int convert_sink_i; - conversion_func_sink_double convert_sink_d; - conversion_func_sink_long_long convert_sink_l; + union { + /* Conversion function for part */ + conversion_func_part_float convert_part_f; + conversion_func_part_int convert_part_i; + conversion_func_part_double convert_part_d; + conversion_func_part_long_long convert_part_l; + + /* Conversion function for gpart */ + conversion_func_gpart_float convert_gpart_f; + conversion_func_gpart_int convert_gpart_i; + conversion_func_gpart_double convert_gpart_d; + conversion_func_gpart_long_long convert_gpart_l; + + /* Conversion function for spart */ + conversion_func_spart_float convert_spart_f; + conversion_func_spart_int convert_spart_i; + conversion_func_spart_double convert_spart_d; + conversion_func_spart_long_long convert_spart_l; + + /* Conversion function for bpart */ + conversion_func_bpart_float convert_bpart_f; + conversion_func_bpart_int convert_bpart_i; + conversion_func_bpart_double convert_bpart_d; + conversion_func_bpart_long_long convert_bpart_l; + + /* Conversion function for sink */ + conversion_func_sink_float convert_sink_f; + conversion_func_sink_int convert_sink_i; + conversion_func_sink_double convert_sink_d; + conversion_func_sink_long_long convert_sink_l; + }; }; /** @@ -250,6 +257,7 @@ INLINE static struct io_props io_make_input_field_( safe_strcpy(r.name, name, FIELD_BUFFER_SIZE); r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = importance; r.units = units; @@ -303,6 +311,7 @@ INLINE static struct io_props io_make_output_field_( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -355,6 +364,7 @@ INLINE static struct io_props io_make_output_field_convert_part_INT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -400,6 +410,7 @@ INLINE static struct io_props io_make_output_field_convert_part_FLOAT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -445,6 +456,7 @@ INLINE static struct io_props io_make_output_field_convert_part_DOUBLE( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -490,6 +502,7 @@ INLINE static struct io_props io_make_output_field_convert_part_LONGLONG( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -543,6 +556,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_INT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -586,6 +600,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_FLOAT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -629,6 +644,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_DOUBLE( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -672,6 +688,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_LONGLONG( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -724,6 +741,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_INT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -767,6 +785,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_FLOAT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -810,6 +829,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_DOUBLE( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -853,6 +873,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_LONGLONG( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -905,6 +926,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_INT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -948,6 +970,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_FLOAT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -991,6 +1014,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_DOUBLE( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -1034,6 +1058,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_LONGLONG( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -1086,6 +1111,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_INT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -1129,6 +1155,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_FLOAT( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -1172,6 +1199,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_DOUBLE( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units; @@ -1215,6 +1243,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_LONGLONG( safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE); } r.type = type; + r.is_used = 1; r.dimension = dimension; r.importance = UNUSED; r.units = units;