diff --git a/definitions/grib2/template.5.200.def b/definitions/grib2/template.5.200.def new file mode 100644 index 000000000..b5771cfe1 --- /dev/null +++ b/definitions/grib2/template.5.200.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# Grid point data - Run length encoding + +unsigned[1] bitsPerValue : dump; +unsigned[2] maxLevelValue : dump; +unsigned[2] numberOfLevelValues : dump; +unsigned[1] decimalScaleFactor : dump; +level_value_list list(numberOfLevelValues) { + unsigned[2] levelValues : dump; +} diff --git a/definitions/grib2/template.7.200.def b/definitions/grib2/template.7.200.def new file mode 100644 index 000000000..300d9ff04 --- /dev/null +++ b/definitions/grib2/template.7.200.def @@ -0,0 +1,26 @@ +# (C) Copyright 2005- ECMWF. + +# Grid point data - Run length encoding + +meta codedValues data_run_length_packing( + section7Length, + offsetBeforeData, + offsetSection7, + numberOfValues, + bitsPerValue, + maxLevelValue, + numberOfLevelValues, + decimalScaleFactor, + levelValues +): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0032eee04..77345c475 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -394,6 +394,7 @@ list( APPEND eccodes_src_files grib_accessor_class_blob.c grib_optimize_decimal_factor.c grib_accessor_class_data_g2bifourier_packing.c + grib_accessor_class_data_run_length_packing.c eccodes_windef.h # We ship our own generated lex/yacc C files grib_yacc.c grib_lex.c ) diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 81f18a4d6..a86c2a71d 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -62,6 +62,7 @@ extern grib_accessor_class* grib_accessor_class_data_g2simple_packing_with_prepr extern grib_accessor_class* grib_accessor_class_data_jpeg2000_packing; extern grib_accessor_class* grib_accessor_class_data_png_packing; extern grib_accessor_class* grib_accessor_class_data_raw_packing; +extern grib_accessor_class* grib_accessor_class_data_run_length_packing; extern grib_accessor_class* grib_accessor_class_data_secondary_bitmap; extern grib_accessor_class* grib_accessor_class_data_sh_packed; extern grib_accessor_class* grib_accessor_class_data_sh_unpacked; diff --git a/src/grib_accessor_class_data_run_length_packing.c b/src/grib_accessor_class_data_run_length_packing.c new file mode 100644 index 000000000..a33d0dcef --- /dev/null +++ b/src/grib_accessor_class_data_run_length_packing.c @@ -0,0 +1,254 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + MEMBERS=const char* number_of_values + MEMBERS=const char* bits_per_value + MEMBERS=const char* max_level_value + MEMBERS=const char* number_of_level_values + MEMBERS=const char* decimal_scale_factor + MEMBERS=const char* level_values + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val, size_t* len); +static int value_count(grib_accessor*, long*); +static void init(grib_accessor*, const long, grib_arguments*); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_run_length_packing +{ + grib_accessor att; + /* Members defined in gen */ + /* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; + /* Members defined in data_run_length_packing */ + const char* number_of_values; + const char* bits_per_value; + const char* max_level_value; + const char* number_of_level_values; + const char* decimal_scale_factor; + const char* level_values; +} grib_accessor_data_run_length_packing; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_run_length_packing = { + &grib_accessor_class_values, /* super */ + "data_run_length_packing", /* name */ + sizeof(grib_accessor_data_run_length_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack array procedures string */ + 0, /* grib_unpack array procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ + 0, /* clone accessor */ +}; + + +grib_accessor_class* grib_accessor_class_data_run_length_packing = &_grib_accessor_class_data_run_length_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_string_array = (*(c->super))->pack_string_array; + c->unpack_string_array = (*(c->super))->unpack_string_array; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; + c->make_clone = (*(c->super))->make_clone; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long v, grib_arguments* args) +{ + grib_accessor_data_run_length_packing* self = (grib_accessor_data_run_length_packing*)a; + grib_handle* gh = grib_handle_of_accessor(a); + self->number_of_values = grib_arguments_get_name(gh, args, self->carg++); + self->bits_per_value = grib_arguments_get_name(gh, args, self->carg++); + self->max_level_value = grib_arguments_get_name(gh, args, self->carg++); + self->number_of_level_values = grib_arguments_get_name(gh, args, self->carg++); + self->decimal_scale_factor = grib_arguments_get_name(gh, args, self->carg++); + self->level_values = grib_arguments_get_name(gh, args, self->carg++); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; +} + +static int value_count(grib_accessor* a, long* number_of_values) +{ + grib_accessor_data_run_length_packing* self = (grib_accessor_data_run_length_packing*)a; + *number_of_values = 0; + return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_values, number_of_values); +} + +static int unpack_double(grib_accessor* a, double* val, size_t* len) +{ + grib_accessor_data_run_length_packing* self = (grib_accessor_data_run_length_packing*)a; + grib_handle* gh = grib_handle_of_accessor(a); + int err = GRIB_SUCCESS; + long seclen, number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor; + if ((err = grib_get_long_internal(gh, self->seclen, &seclen)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->number_of_values, &number_of_values)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->max_level_value, &max_level_value)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->number_of_level_values, &number_of_level_values)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + return err; + long* level_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_level_values); + size_t level_values_size = number_of_level_values; + if ((err = grib_get_long_array_internal(gh, self->level_values, level_values, &level_values_size)) != GRIB_SUCCESS) + return err; + *len = number_of_values; + int i = 0; + long number_of_compressed_values = ((seclen - 5) * 8) / bits_per_value; + if (number_of_compressed_values == 0 || max_level_value == 0) { + for (i = 0; i < number_of_values; i++) { + val[i] = GRIB_MISSING_DOUBLE; + } + return GRIB_SUCCESS; + } + long range = (1 << bits_per_value) - 1 - max_level_value; + if ((max_level_value <= 0) || (number_of_level_values <= 0) || (max_level_value > number_of_level_values) || (range <= 0)) { + grib_context_log(a->context, GRIB_LOG_ERROR, "parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), number_of_level_values=%ld(>0, >=max_level_value), range=%ld(>0)", max_level_value, number_of_level_values, range); + return GRIB_DECODING_ERROR; + } + if (decimal_scale_factor > 127) { + decimal_scale_factor = -(decimal_scale_factor - 128); + } + double level_scale_factor = grib_power(-decimal_scale_factor, 10.0); + double* levels = (double*)grib_context_malloc_clear(a->context, sizeof(double) * (number_of_level_values + 1)); + levels[0] = 0; + for (i = 0; i < number_of_level_values; i++) { + levels[i + 1] = level_values[i] * level_scale_factor; + } + long* compressed_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_compressed_values); + unsigned char* buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data; + long offsetBeforeData = grib_byte_offset(a); + buf += offsetBeforeData; + long pos = 0; + grib_decode_long_array(buf, &pos, bits_per_value, number_of_compressed_values, compressed_values); + long v, n, factor, k; + long j = 0; + i = 0; + while (i < number_of_compressed_values) { + if (compressed_values[i] > max_level_value) { + grib_context_log(a->context, GRIB_LOG_ERROR, "numberOfValues mismatch: i=%ld, compressed_values[i]=%ld, max_level_value=%ld", i, compressed_values[i], max_level_value); + break; + } + v = compressed_values[i++]; + n = 1; + factor = 1; + while (i < number_of_compressed_values && compressed_values[i] > max_level_value) { + n += factor * (compressed_values[i] - max_level_value - 1); + factor = factor * range; + i++; + } + if (n > number_of_values) { + grib_context_log(a->context, GRIB_LOG_ERROR, "numberOfValues mismatch: n=%ld, number_of_values=%ld", n, number_of_values); + break; + } + for (k = 0; k < n; k++) { + val[j++] = levels[v]; + } + } + grib_context_free(a->context, level_values); + grib_context_free(a->context, levels); + grib_context_free(a->context, compressed_values); + if (j != number_of_values) { + grib_context_log(a->context, GRIB_LOG_ERROR, "numberOfValues mismatch: j=%ld, number_of_values=%ld", j, number_of_values); + return GRIB_DECODING_ERROR; + } + return err; +} diff --git a/src/grib_accessor_classes_hash.c b/src/grib_accessor_classes_hash.c index 483323987..60581c6a1 100644 --- a/src/grib_accessor_classes_hash.c +++ b/src/grib_accessor_classes_hash.c @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 220 +#define TOTAL_KEYWORDS 221 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -52,7 +52,7 @@ struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; #endif #endif static unsigned int -grib_accessor_classes_get_id (const char *str, size_t len) +grib_accessor_classes_get_id (register const char *str, register size_t len) { static const unsigned short asso_values[] = { @@ -83,7 +83,7 @@ grib_accessor_classes_get_id (const char *str, size_t len) 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832 }; - unsigned int hval = len; + register unsigned int hval = len; switch (hval) { @@ -118,100 +118,100 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 157 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 119 "accessor_class_list.gperf" +#line 120 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, {""}, {""}, -#line 120 "accessor_class_list.gperf" +#line 121 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, {""}, -#line 85 "accessor_class_list.gperf" +#line 86 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, {""}, {""}, {""}, {""}, -#line 135 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, {""}, -#line 73 "accessor_class_list.gperf" +#line 74 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 204 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 71 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, {""}, -#line 192 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, -#line 182 "accessor_class_list.gperf" - {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 189 "accessor_class_list.gperf" - {"signed", &grib_accessor_class_signed}, #line 183 "accessor_class_list.gperf" + {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, +#line 190 "accessor_class_list.gperf" + {"signed", &grib_accessor_class_signed}, +#line 184 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 205 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"times", &grib_accessor_class_times}, #line 72 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, -#line 118 "accessor_class_list.gperf" +#line 119 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, -#line 129 "accessor_class_list.gperf" +#line 130 "accessor_class_list.gperf" {"int16", &grib_accessor_class_int16}, #line 14 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, {""}, -#line 184 "accessor_class_list.gperf" - {"section_length", &grib_accessor_class_section_length}, #line 185 "accessor_class_list.gperf" + {"section_length", &grib_accessor_class_section_length}, +#line 186 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 198 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, -#line 201 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, -#line 190 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, -#line 195 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, -#line 169 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 77 "accessor_class_list.gperf" +#line 78 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, -#line 80 "accessor_class_list.gperf" +#line 81 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, -#line 133 "accessor_class_list.gperf" +#line 134 "accessor_class_list.gperf" {"int64", &grib_accessor_class_int64}, {""}, -#line 199 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, -#line 79 "accessor_class_list.gperf" +#line 80 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, {""}, -#line 117 "accessor_class_list.gperf" +#line 118 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, {""}, -#line 114 "accessor_class_list.gperf" +#line 115 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 207 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, {""}, -#line 109 "accessor_class_list.gperf" +#line 110 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, #line 48 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, {""}, -#line 186 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 70 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, -#line 131 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, #line 63 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 110 "accessor_class_list.gperf" +#line 111 "accessor_class_list.gperf" {"g2end_step", &grib_accessor_class_g2end_step}, #line 51 "accessor_class_list.gperf" {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, -#line 107 "accessor_class_list.gperf" +#line 108 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, #line 49 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, @@ -221,141 +221,143 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, #line 50 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 115 "accessor_class_list.gperf" +#line 116 "accessor_class_list.gperf" {"g2step_range", &grib_accessor_class_g2step_range}, {""}, -#line 111 "accessor_class_list.gperf" +#line 112 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, -#line 202 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, -#line 208 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, {""}, {""}, -#line 136 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, -#line 170 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, {""}, {""}, #line 67 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, -#line 138 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"julian_day", &grib_accessor_class_julian_day}, -#line 137 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, -#line 221 "accessor_class_list.gperf" +#line 222 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, -#line 171 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, -#line 105 "accessor_class_list.gperf" +#line 106 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, #line 54 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, {""}, -#line 158 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 218 "accessor_class_list.gperf" +#line 219 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, {""}, -#line 200 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, - {""}, {""}, +#line 73 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, + {""}, #line 68 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 65 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 214 "accessor_class_list.gperf" +#line 215 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, {""}, -#line 103 "accessor_class_list.gperf" +#line 104 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 112 "accessor_class_list.gperf" +#line 113 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, #line 16 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, #line 18 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, -#line 216 "accessor_class_list.gperf" +#line 217 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, {""}, {""}, #line 66 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 64 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 83 "accessor_class_list.gperf" +#line 84 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, #line 33 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, {""}, #line 17 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, -#line 222 "accessor_class_list.gperf" +#line 223 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, #line 69 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 215 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 142 "accessor_class_list.gperf" +#line 143 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 160 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, {""}, #line 19 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 217 "accessor_class_list.gperf" +#line 218 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, {""}, {""}, -#line 219 "accessor_class_list.gperf" +#line 220 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, #line 12 "accessor_class_list.gperf" {"apply_operators", &grib_accessor_class_apply_operators}, #line 21 "accessor_class_list.gperf" {"box", &grib_accessor_class_box}, -#line 161 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, {""}, {""}, {""}, {""}, -#line 174 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 121 "accessor_class_list.gperf" +#line 122 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, {""}, -#line 188 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 141 "accessor_class_list.gperf" +#line 142 "accessor_class_list.gperf" {"laplacian", &grib_accessor_class_laplacian}, {""}, {""}, {""}, -#line 191 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, {""}, -#line 147 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, -#line 180 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, -#line 82 "accessor_class_list.gperf" +#line 83 "accessor_class_list.gperf" {"double", &grib_accessor_class_double}, {""}, {""}, -#line 81 "accessor_class_list.gperf" +#line 82 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, {""}, {""}, {""}, -#line 106 "accessor_class_list.gperf" +#line 107 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, {""}, {""}, #line 22 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, {""}, {""}, {""}, -#line 211 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, #line 52 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, {""}, -#line 176 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, {""}, {""}, {""}, {""}, {""}, #line 24 "accessor_class_list.gperf" {"bufr_data_element", &grib_accessor_class_bufr_data_element}, -#line 209 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, #line 15 "accessor_class_list.gperf" {"assert", &grib_accessor_class_assert}, @@ -363,16 +365,16 @@ static const struct accessor_class_hash classes[] = #line 23 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, {""}, -#line 206 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, -#line 210 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, {""}, #line 32 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, #line 31 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 228 "accessor_class_list.gperf" +#line 229 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, {""}, {""}, #line 20 "accessor_class_list.gperf" @@ -387,122 +389,122 @@ static const struct accessor_class_hash classes[] = {"concept", &grib_accessor_class_concept}, #line 43 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, -#line 177 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, -#line 91 "accessor_class_list.gperf" +#line 92 "accessor_class_list.gperf" {"g1area", &grib_accessor_class_g1area}, -#line 165 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, -#line 225 "accessor_class_list.gperf" +#line 226 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, -#line 93 "accessor_class_list.gperf" +#line 94 "accessor_class_list.gperf" {"g1date", &grib_accessor_class_g1date}, -#line 187 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, {""}, -#line 173 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, {""}, -#line 116 "accessor_class_list.gperf" +#line 117 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 179 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, {""}, -#line 92 "accessor_class_list.gperf" +#line 93 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, {""}, {""}, -#line 122 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, #line 123 "accessor_class_list.gperf" + {"group", &grib_accessor_class_group}, +#line 124 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, {""}, -#line 89 "accessor_class_list.gperf" +#line 90 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 223 "accessor_class_list.gperf" +#line 224 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 140 "accessor_class_list.gperf" +#line 141 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, -#line 101 "accessor_class_list.gperf" +#line 102 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, {""}, -#line 126 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, {""}, -#line 175 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, -#line 150 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"lookup", &grib_accessor_class_lookup}, {""}, {""}, {""}, {""}, -#line 196 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, #line 47 "accessor_class_list.gperf" {"data_2order_packing", &grib_accessor_class_data_2order_packing}, {""}, #line 61 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, -#line 224 "accessor_class_list.gperf" +#line 225 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, -#line 197 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, -#line 159 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, -#line 108 "accessor_class_list.gperf" +#line 109 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, {""}, -#line 90 "accessor_class_list.gperf" +#line 91 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, {""}, {""}, -#line 227 "accessor_class_list.gperf" +#line 228 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, -#line 166 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, -#line 75 "accessor_class_list.gperf" +#line 76 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 86 "accessor_class_list.gperf" +#line 87 "accessor_class_list.gperf" {"forward", &grib_accessor_class_forward}, {""}, #line 62 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 55 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 76 "accessor_class_list.gperf" +#line 77 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, {""}, {""}, -#line 149 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, {""}, -#line 203 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, {""}, {""}, {""}, #line 60 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, {""}, {""}, -#line 130 "accessor_class_list.gperf" +#line 131 "accessor_class_list.gperf" {"int16_little_endian", &grib_accessor_class_int16_little_endian}, {""}, -#line 127 "accessor_class_list.gperf" +#line 128 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, {""}, -#line 153 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, -#line 95 "accessor_class_list.gperf" +#line 96 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, #line 37 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, {""}, {""}, #line 58 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 146 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, {""}, #line 59 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 134 "accessor_class_list.gperf" +#line 135 "accessor_class_list.gperf" {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 84 "accessor_class_list.gperf" +#line 85 "accessor_class_list.gperf" {"evaluate", &grib_accessor_class_evaluate}, -#line 154 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, #line 56 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, @@ -511,57 +513,57 @@ static const struct accessor_class_hash classes[] = {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, #line 25 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 162 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, -#line 152 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, {""}, -#line 212 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, -#line 193 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, #line 39 "accessor_class_list.gperf" {"codetable", &grib_accessor_class_codetable}, -#line 151 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, {""}, {""}, -#line 132 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 172 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, -#line 194 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, {""}, #line 40 "accessor_class_list.gperf" {"codetable_title", &grib_accessor_class_codetable_title}, {""}, {""}, -#line 163 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, {""}, {""}, -#line 213 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 125 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, {""}, #line 46 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, {""}, {""}, {""}, {""}, {""}, -#line 155 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, -#line 167 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, -#line 226 "accessor_class_list.gperf" +#line 227 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, {""}, {""}, #line 28 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, -#line 168 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, -#line 148 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, -#line 156 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"missing", &grib_accessor_class_missing}, #line 26 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, @@ -572,30 +574,30 @@ static const struct accessor_class_hash classes[] = #line 27 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, {""}, -#line 145 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, {""}, {""}, {""}, -#line 143 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 74 "accessor_class_list.gperf" +#line 75 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, {""}, {""}, -#line 181 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, -#line 113 "accessor_class_list.gperf" +#line 114 "accessor_class_list.gperf" {"g2level", &grib_accessor_class_g2level}, {""}, {""}, {""}, {""}, -#line 144 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, #line 41 "accessor_class_list.gperf" {"codetable_units", &grib_accessor_class_codetable_units}, {""}, {""}, -#line 139 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, -#line 124 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, {""}, {""}, #line 35 "accessor_class_list.gperf" @@ -604,7 +606,7 @@ static const struct accessor_class_hash classes[] = #line 34 "accessor_class_list.gperf" {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 78 "accessor_class_list.gperf" +#line 79 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, {""}, {""}, {""}, {""}, {""}, {""}, #line 44 "accessor_class_list.gperf" @@ -613,25 +615,25 @@ static const struct accessor_class_hash classes[] = #line 38 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, {""}, {""}, -#line 164 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, {""}, -#line 220 "accessor_class_list.gperf" +#line 221 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, {""}, {""}, -#line 98 "accessor_class_list.gperf" +#line 99 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, {""}, {""}, {""}, -#line 96 "accessor_class_list.gperf" +#line 97 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, {""}, {""}, {""}, {""}, {""}, #line 11 "accessor_class_list.gperf" {"abstract_vector", &grib_accessor_class_abstract_vector}, {""}, {""}, -#line 88 "accessor_class_list.gperf" +#line 89 "accessor_class_list.gperf" {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, {""}, {""}, -#line 128 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -642,7 +644,7 @@ static const struct accessor_class_hash classes[] = #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 94 "accessor_class_list.gperf" +#line 95 "accessor_class_list.gperf" {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -653,20 +655,20 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 87 "accessor_class_list.gperf" +#line 88 "accessor_class_list.gperf" {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 36 "accessor_class_list.gperf" {"check_internal_version", &grib_accessor_class_check_internal_version}, {""}, -#line 178 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 102 "accessor_class_list.gperf" +#line 103 "accessor_class_list.gperf" {"g1verificationdate", &grib_accessor_class_g1verificationdate}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -674,7 +676,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 104 "accessor_class_list.gperf" +#line 105 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -684,9 +686,9 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 100 "accessor_class_list.gperf" +#line 101 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, -#line 99 "accessor_class_list.gperf" +#line 100 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -700,7 +702,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 97 "accessor_class_list.gperf" +#line 98 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; @@ -715,8 +717,10 @@ grib_accessor_classes_hash (const char *str, size_t len) Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); Assert( key <= MAX_HASH_VALUE ); s = classes[key].name; - Assert( *str == *s && strcmp (str + 1, s + 1)==0 ); + Assert( *str == *s && strcmp(str + 1, s + 1)==0 ); } #endif + return &classes[key]; + } diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index c623b2dde..5a2a8db43 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -62,6 +62,7 @@ { "data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing, }, { "data_png_packing", &grib_accessor_class_data_png_packing, }, { "data_raw_packing", &grib_accessor_class_data_raw_packing, }, +{ "data_run_length_packing", &grib_accessor_class_data_run_length_packing, }, { "data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap, }, { "data_sh_packed", &grib_accessor_class_data_sh_packed, }, { "data_sh_unpacked", &grib_accessor_class_data_sh_unpacked, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 9dd01d5cf..f5b01c828 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -63,6 +63,7 @@ data_g2simple_packing_with_preprocessing, &grib_accessor_class_data_g2simple_pac data_jpeg2000_packing, &grib_accessor_class_data_jpeg2000_packing data_png_packing, &grib_accessor_class_data_png_packing data_raw_packing, &grib_accessor_class_data_raw_packing +data_run_length_packing, &grib_accessor_class_data_run_length_packing data_secondary_bitmap, &grib_accessor_class_data_secondary_bitmap data_sh_packed, &grib_accessor_class_data_sh_packed data_sh_unpacked, &grib_accessor_class_data_sh_unpacked