Migration to C++

This commit is contained in:
Shahram Najm 2023-03-14 14:53:43 +00:00
parent b25643aa99
commit be4b84a293
3 changed files with 70 additions and 77 deletions

View File

@ -274,7 +274,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if ((err = grib_get_long_internal(hand, self->ccsds_rsi, &ccsds_rsi)) != GRIB_SUCCESS) if ((err = grib_get_long_internal(hand, self->ccsds_rsi, &ccsds_rsi)) != GRIB_SUCCESS)
return err; return err;
/* Special case */ // Special case
if (*len == 0) { if (*len == 0) {
grib_buffer_replace(a, NULL, 0, 1, 1); grib_buffer_replace(a, NULL, 0, 1, 1);
return GRIB_SUCCESS; return GRIB_SUCCESS;
@ -295,8 +295,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
is_constant_field = true; is_constant_field = true;
} else { } else {
if (bits_per_value == 0) { if (bits_per_value == 0) {
/* ECC-1202: A non-constant field with bitsPerValue==0! */ // ECC-1202: A non-constant field with bitsPerValue==0!
bits_per_value = 24; /* Set sane value */ bits_per_value = 24; // Set sane value
} }
} }
@ -316,7 +316,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if ((err = grib_set_long_internal(hand, self->number_of_values, n_vals)) != GRIB_SUCCESS) if ((err = grib_set_long_internal(hand, self->number_of_values, n_vals)) != GRIB_SUCCESS)
return err; return err;
bits_per_value = 0; /* ECC-1387 */ bits_per_value = 0; // ECC-1387
if ((err = grib_set_long_internal(hand, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) if ((err = grib_set_long_internal(hand, self->bits_per_value, bits_per_value)) != GRIB_SUCCESS)
return err; return err;
@ -347,7 +347,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
} }
} }
else { else {
int last = 127; /* last must be a parameter coming from the def file*/ int last = 127; // last must be a parameter coming from the def file
double range = 0; double range = 0;
double minrange = 0, maxrange = 0; double minrange = 0, maxrange = 0;
double unscaled_max = 0; double unscaled_max = 0;
@ -407,11 +407,11 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
buflen++; buflen++;
} }
} }
/* buflen = n_vals*(bits_per_value/8);*/ // buflen = n_vals*(bits_per_value/8);
grib_context_log(a->context, GRIB_LOG_DEBUG,"CCSDS pack_double: packing %s, %d values", a->name, n_vals); grib_context_log(a->context, GRIB_LOG_DEBUG,"CCSDS pack_double: packing %s, %d values", a->name, n_vals);
/*ECC-1431: GRIB2: CCSDS encoding failure AEC_STREAM_ERROR*/ // ECC-1431: GRIB2: CCSDS encoding failure AEC_STREAM_ERROR
buflen += buflen / 20 + 256; buflen += buflen / 20 + 256;
buf = (unsigned char*)grib_context_buffer_malloc_clear(a->context, buflen); buf = (unsigned char*)grib_context_buffer_malloc_clear(a->context, buflen);
@ -423,7 +423,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if ((err = grib_set_double_internal(hand, self->reference_value, reference_value)) != GRIB_SUCCESS) if ((err = grib_set_double_internal(hand, self->reference_value, reference_value)) != GRIB_SUCCESS)
return err; return err;
{ {
/* Make sure we can decode it again */ // Make sure we can decode it again
double ref = 1e-100; double ref = 1e-100;
grib_get_double_internal(hand, self->reference_value, &ref); grib_get_double_internal(hand, self->reference_value, &ref);
Assert(ref == reference_value); Assert(ref == reference_value);
@ -445,10 +445,9 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
strm.next_in = encoded; strm.next_in = encoded;
strm.avail_in = bits8 / 8 * n_vals; strm.avail_in = bits8 / 8 * n_vals;
/* // This does not support spherical harmonics, and treats 24 differently than:
This does not support spherical harmonics, and treats 24 differently than: // see http://cdo.sourcearchive.com/documentation/1.5.1.dfsg.1-1/cgribexlib_8c_source.html
see http://cdo.sourcearchive.com/documentation/1.5.1.dfsg.1-1/cgribexlib_8c_source.html
*/
if (hand->context->debug) print_aec_stream_info(&strm, "pack_double"); if (hand->context->debug) print_aec_stream_info(&strm, "pack_double");
if ((err = aec_buffer_encode(&strm)) != AEC_OK) { if ((err = aec_buffer_encode(&strm)) != AEC_OK) {
@ -458,10 +457,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
goto cleanup; goto cleanup;
} }
/* //printf("n_vals = %ld, bits8 = %ld\n", n_vals, bits8);
printf("n_vals = %ld, bits8 = %ld\n", n_vals, bits8); //printf("in %ld out => %zu\n", bits8/8*n_vals, buflen);
printf("in %ld out => %zu\n", bits8/8*n_vals, buflen);
*/
buflen = strm.total_out; buflen = strm.total_out;
grib_buffer_replace(a, buf, buflen, 1, 1); grib_buffer_replace(a, buf, buflen, 1, 1);
@ -494,7 +491,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
size_t n_vals = 0; size_t n_vals = 0;
size_t size = 0; size_t size = 0;
unsigned char* decoded = NULL; unsigned char* decoded = NULL;
/*unsigned char* p = NULL;*/ // unsigned char* p = NULL;
long pos = 0; long pos = 0;
long nn = 0; long nn = 0;
@ -523,7 +520,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
if ((err = grib_get_long_internal(hand, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) if ((err = grib_get_long_internal(hand, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS)
return err; return err;
/* ECC-477: Don't call grib_get_long_internal to suppress error message being output */ // ECC-477: Don't call grib_get_long_internal to suppress error message being output
if ((err = grib_get_long(hand, self->ccsds_flags, &ccsds_flags)) != GRIB_SUCCESS) if ((err = grib_get_long(hand, self->ccsds_flags, &ccsds_flags)) != GRIB_SUCCESS)
return err; return err;
@ -532,11 +529,11 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
if ((err = grib_get_long_internal(hand, self->ccsds_rsi, &ccsds_rsi)) != GRIB_SUCCESS) if ((err = grib_get_long_internal(hand, self->ccsds_rsi, &ccsds_rsi)) != GRIB_SUCCESS)
return err; return err;
/* TODO: This should be called upstream */ // TODO: This should be called upstream
if (*len < n_vals) if (*len < n_vals)
return GRIB_ARRAY_TOO_SMALL; return GRIB_ARRAY_TOO_SMALL;
/* Special case */ // Special case
if (bits_per_value == 0) { if (bits_per_value == 0) {
for (i = 0; i < n_vals; i++) for (i = 0; i < n_vals; i++)
val[i] = reference_value; val[i] = reference_value;
@ -580,8 +577,8 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
pos = 0; pos = 0;
/* ECC-1427: Performance improvement */ // ECC-1427: Performance improvement
//grib_decode_float_array(decoded, &pos, bits8 , reference_value, bscale, dscale, n_vals, val); //grib_decode_float_array(decoded, &pos, bits8 , reference_value, bscale, dscale, n_vals, val);
grib_decode_array<T>(decoded, &pos, bits8 , reference_value, bscale, dscale, n_vals, val); grib_decode_array<T>(decoded, &pos, bits8 , reference_value, bscale, dscale, n_vals, val);
*len = n_vals; *len = n_vals;
@ -602,7 +599,7 @@ static int unpack_float(grib_accessor* a, float* val, size_t* len)
static int unpack_double_element(grib_accessor* a, size_t idx, double* val) static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
{ {
/* The index idx relates to codedValues NOT values! */ // The index idx relates to codedValues NOT values!
grib_accessor_data_ccsds_packing* self = (grib_accessor_data_ccsds_packing*)a; grib_accessor_data_ccsds_packing* self = (grib_accessor_data_ccsds_packing*)a;
grib_handle* hand = grib_handle_of_accessor(a); grib_handle* hand = grib_handle_of_accessor(a);
int err = 0; int err = 0;
@ -616,7 +613,7 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS)
return err; return err;
/* Special case of constant field */ // Special case of constant field
if (bits_per_value == 0) { if (bits_per_value == 0) {
*val = reference_value; *val = reference_value;
return GRIB_SUCCESS; return GRIB_SUCCESS;
@ -652,7 +649,7 @@ static int unpack_double_element_set(grib_accessor* a, const size_t* index_array
if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) if ((err = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS)
return err; return err;
/* Special case of constant field */ // Special case of constant field
if (bits_per_value == 0) { if (bits_per_value == 0) {
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
val_array[i] = reference_value; val_array[i] = reference_value;
@ -660,7 +657,7 @@ static int unpack_double_element_set(grib_accessor* a, const size_t* index_array
return GRIB_SUCCESS; return GRIB_SUCCESS;
} }
/* GRIB-564: The indexes in index_array relate to codedValues NOT values! */ // GRIB-564: The indexes in index_array relate to codedValues NOT values!
err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size); err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size);
if (err) if (err)
return err; return err;

View File

@ -8,12 +8,8 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/ */
/**************************************
* Enrico Fucile
**************************************/
#include "grib_api_internal.h" #include "grib_api_internal.h"
/* /*
This is used by make_class.pl This is used by make_class.pl
@ -220,10 +216,10 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
return GRIB_ENCODING_ERROR; return GRIB_ENCODING_ERROR;
} }
/* eps or stream=(enda or elda or ewla) */ // eps or stream=(enda or elda or ewla)
if (eps || stream == 1030 || stream == 1249 || stream == 1250) { if (eps || stream == 1030 || stream == 1249 || stream == 1250) {
if (isInstant) { if (isInstant) {
/* type=em || type=es */ // type=em || type=es
if (type == 17) { if (type == 17) {
productDefinitionTemplateNumberNew = 2; productDefinitionTemplateNumberNew = 2;
derivedForecast = 0; derivedForecast = 0;
@ -237,7 +233,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
else { else {
/* type=em || type=es */ // type=em || type=es
if (type == 17) { if (type == 17) {
productDefinitionTemplateNumberNew = 12; productDefinitionTemplateNumberNew = 12;
derivedForecast = 0; derivedForecast = 0;
@ -260,7 +256,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
/* Adjust for chemical species */ // Adjust for chemical species
if (chemical == 1) { if (chemical == 1) {
if (eps == 1) { if (eps == 1) {
if (isInstant) { if (isInstant) {
@ -280,20 +276,20 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
/* Adjust for aerosols */ // Adjust for aerosols
if (aerosol == 1) { if (aerosol == 1) {
if (eps == 1) { if (eps == 1) {
if (isInstant) { if (isInstant) {
productDefinitionTemplateNumberNew = 45; productDefinitionTemplateNumberNew = 45;
} }
else { else {
/*productDefinitionTemplateNumberNew = 47; This PDT is deprecated */ //productDefinitionTemplateNumberNew = 47; This PDT is deprecated
productDefinitionTemplateNumberNew = 85; productDefinitionTemplateNumberNew = 85;
} }
} }
else { else {
if (isInstant) { if (isInstant) {
productDefinitionTemplateNumberNew = 48; /*44 is deprecated*/ productDefinitionTemplateNumberNew = 48; //44 is deprecated*/
} }
else { else {
productDefinitionTemplateNumberNew = 46; productDefinitionTemplateNumberNew = 46;

View File

@ -258,12 +258,12 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
productDefinitionTemplateNumberNew = 0; productDefinitionTemplateNumberNew = 0;
break; break;
case 1: /* MARS labelling */ case 1: // MARS labelling
case 36: /* MARS labelling for long window 4Dvar system */ case 36: // MARS labelling for long window 4Dvar system
case 40: /* MARS labeling with domain and model (for LAM) */ case 40: // MARS labeling with domain and model (for LAM)
case 42: /* LC-WFV: Wave forecast verification */ case 42: // LC-WFV: Wave forecast verification
if (isInstant) { if (isInstant) {
/* type=em || type=es */ // type=em || type=es
if (type == 17) { if (type == 17) {
productDefinitionTemplateNumberNew = 2; productDefinitionTemplateNumberNew = 2;
derivedForecast = 0; derivedForecast = 0;
@ -271,7 +271,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
else if (type == 18) { else if (type == 18) {
productDefinitionTemplateNumberNew = 2; productDefinitionTemplateNumberNew = 2;
derivedForecast = 4; derivedForecast = 4;
/* eps or enda or elda or ewla */ // eps or enda or elda or ewla
} }
else if (eps == 1 || stream == 1030 || stream == 1249 || stream == 1250) { else if (eps == 1 || stream == 1030 || stream == 1249 || stream == 1250) {
productDefinitionTemplateNumberNew = 1; productDefinitionTemplateNumberNew = 1;
@ -281,7 +281,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
else { else {
/* type=em || type=es */ // type=em || type=es
if (type == 17) { if (type == 17) {
productDefinitionTemplateNumberNew = 12; productDefinitionTemplateNumberNew = 12;
derivedForecast = 0; derivedForecast = 0;
@ -289,7 +289,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
else if (type == 18) { else if (type == 18) {
productDefinitionTemplateNumberNew = 12; productDefinitionTemplateNumberNew = 12;
derivedForecast = 4; derivedForecast = 4;
/* eps or enda or elda or ewla */ // eps or enda or elda or ewla
} }
else if (eps == 1 || stream == 1030 || stream == 1249 || stream == 1250) { else if (eps == 1 || stream == 1030 || stream == 1249 || stream == 1250) {
productDefinitionTemplateNumberNew = 11; productDefinitionTemplateNumberNew = 11;
@ -299,7 +299,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
break; break;
case 41: /* EFAS: uses post-processing templates */ case 41: // EFAS: uses post-processing templates
if (isInstant) { if (isInstant) {
if (eps == 1) if (eps == 1)
productDefinitionTemplateNumberNew = 71; productDefinitionTemplateNumberNew = 71;
@ -307,7 +307,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
productDefinitionTemplateNumberNew = 70; productDefinitionTemplateNumberNew = 70;
} }
else { else {
/* non-instantaneous: accum etc */ // non-instantaneous: accum etc
if (eps == 1) if (eps == 1)
productDefinitionTemplateNumberNew = 73; productDefinitionTemplateNumberNew = 73;
else else
@ -315,12 +315,12 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
break; break;
case 15: /* Seasonal forecast data */ case 15: // Seasonal forecast data
case 16: /* Seasonal forecast monthly mean data */ case 16: // Seasonal forecast monthly mean data
case 12: /* Seasonal forecast monthly mean data for lagged systems */ case 12: // Seasonal forecast monthly mean data for lagged systems
case 18: /* Multianalysis ensemble data */ case 18: // Multianalysis ensemble data
case 26: /* MARS labelling or ensemble forecast data */ case 26: // MARS labelling or ensemble forecast data
case 30: /* Forecasting Systems with Variable Resolution */ case 30: // Forecasting Systems with Variable Resolution
if (isInstant) { if (isInstant) {
productDefinitionTemplateNumberNew = 1; productDefinitionTemplateNumberNew = 1;
} }
@ -329,21 +329,21 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
break; break;
case 5: /* Forecast probability data */ case 5: // Forecast probability data
case 7: /* Sensitivity data */ case 7: // Sensitivity data
case 9: /* Singular vectors and ensemble perturbations */ case 9: // Singular vectors and ensemble perturbations
case 11: /* Supplementary data used by the analysis */ case 11: // Supplementary data used by the analysis
case 14: /* Brightness temperature */ case 14: // Brightness temperature
case 20: /* 4D variational increments */ case 20: // 4D variational increments
case 21: /* Sensitive area predictions */ case 21: // Sensitive area predictions
case 23: /* Coupled atmospheric, wave and ocean means */ case 23: // Coupled atmospheric, wave and ocean means
case 24: /* Satellite Channel Number Data */ case 24: // Satellite Channel Number Data
case 25: case 25:
case 28: /* COSMO local area EPS */ case 28: // COSMO local area EPS
case 38: /* 4D variational increments for long window 4Dvar system */ case 38: // 4D variational increments for long window 4Dvar system
case 39: /* 4DVar model errors for long window 4Dvar system */ case 39: // 4DVar model errors for long window 4Dvar system
case 60: /* Ocean data analysis */ case 60: // Ocean data analysis
case 192: /* Multiple ECMWF local definitions */ case 192: // Multiple ECMWF local definitions
if (isInstant) { if (isInstant) {
productDefinitionTemplateNumberNew = 0; productDefinitionTemplateNumberNew = 0;
} }
@ -354,17 +354,17 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
default: default:
#ifdef DEBUG #ifdef DEBUG
/* In test & development mode, fail so we remember to adjust PDTN */ // In test & development mode, fail so we remember to adjust PDTN
grib_context_log(a->context, GRIB_LOG_ERROR, grib_context_log(a->context, GRIB_LOG_ERROR,
"grib_accessor_local_definition: Invalid localDefinitionNumber %d", localDefinitionNumber); "grib_accessor_local_definition: Invalid localDefinitionNumber %d", localDefinitionNumber);
return GRIB_ENCODING_ERROR; return GRIB_ENCODING_ERROR;
#endif #endif
/* ECC-1253: Do not fail in operations. Leave PDTN as is */ // ECC-1253: Do not fail in operations. Leave PDTN as is
productDefinitionTemplateNumberNew = productDefinitionTemplateNumber; productDefinitionTemplateNumberNew = productDefinitionTemplateNumber;
break; break;
} }
/* Adjust for atmospheric chemical constituents */ // Adjust for atmospheric chemical constituents
if (chemical == 1) { if (chemical == 1) {
if (eps == 1) { if (eps == 1) {
if (isInstant) { if (isInstant) {
@ -383,7 +383,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
} }
/* Adjust for atmospheric chemical constituents based on a distribution function */ // Adjust for atmospheric chemical constituents based on a distribution function
if (chemical_distfn == 1) { if (chemical_distfn == 1) {
if (eps == 1) { if (eps == 1) {
if (isInstant) { if (isInstant) {
@ -403,7 +403,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
/* Adjust for atmospheric chemical constituents with source or sink */ // Adjust for atmospheric chemical constituents with source or sink
if (chemical_srcsink == 1) { if (chemical_srcsink == 1) {
if (eps == 1) { if (eps == 1) {
if (isInstant) { if (isInstant) {
@ -423,27 +423,27 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
} }
} }
/* Adjust for aerosols */ // Adjust for aerosols
if (aerosol == 1) { if (aerosol == 1) {
if (eps == 1) { if (eps == 1) {
if (isInstant) { if (isInstant) {
productDefinitionTemplateNumberNew = 45; productDefinitionTemplateNumberNew = 45;
} }
else { else {
/*productDefinitionTemplateNumberNew = 47; This PDT is deprecated */ //productDefinitionTemplateNumberNew = 47; This PDT is deprecated
productDefinitionTemplateNumberNew = 85; productDefinitionTemplateNumberNew = 85;
} }
} }
else { else {
if (isInstant) { if (isInstant) {
productDefinitionTemplateNumberNew = 48; /*44 is deprecated*/ productDefinitionTemplateNumberNew = 48; //44 is deprecated*/
} }
else { else {
productDefinitionTemplateNumberNew = 46; productDefinitionTemplateNumberNew = 46;
} }
} }
} }
/* Adjust for optical properties of aerosol */ // Adjust for optical properties of aerosol
if (aerosol_optical == 1) { if (aerosol_optical == 1) {
if (eps == 1) { if (eps == 1) {
if (isInstant) { if (isInstant) {