Skip to content

Commit

Permalink
ECC-2008: Action hierarchy: Use C++ inheritance mechanism (#283)
Browse files Browse the repository at this point in the history
  • Loading branch information
joobog authored and tmi committed Feb 4, 2025
1 parent c7eb6f0 commit 3aba656
Show file tree
Hide file tree
Showing 129 changed files with 4,518 additions and 5,434 deletions.
61 changes: 32 additions & 29 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#

include_directories(
"${CMAKE_CURRENT_SOURCE_DIR}/action"
"${CMAKE_CURRENT_SOURCE_DIR}/dumper"
"${CMAKE_CURRENT_SOURCE_DIR}/accessor"
"${CMAKE_CURRENT_SOURCE_DIR}/geo/iterator"
Expand All @@ -26,37 +27,40 @@ list( APPEND eccodes_src_files
grib_api.h
grib_timer.cc
eccodes.h
action.cc
action_class_alias.cc
action_class_gen.cc
action_class_if.cc
action_class_switch.cc
accessor/grib_accessor_class_g1fcperiod.cc
accessor/grib_accessor_class_g1end_of_interval_monthly.cc
accessor/grib_accessor_class_mars_param.cc
action_class_section.cc
action_class_list.cc
action_class_while.cc
action_class_put.cc
action_class_meta.cc
action_class_remove.cc
action_class_rename.cc
action_class_assert.cc
action_class_template.cc
action_class_trigger.cc
action_class_when.cc
action_class_concept.cc
action_class_hash_array.cc
action_class_set.cc
action_class_set_sarray.cc
action_class_set_darray.cc
action_class_noop.cc
action_class_write.cc
action_class_print.cc
action_class_close.cc
action_class_variable.cc
action_class_modify.cc
action_class_transient_darray.cc

action/action.cc
action/action_class_alias.cc
action/action_class_gen.cc
action/action_class_if.cc
action/action_class_switch.cc
action/action_class_section.cc
action/action_class_list.cc
action/action_class_while.cc
action/action_class_put.cc
action/action_class_meta.cc
action/action_class_remove.cc
action/action_class_rename.cc
action/action_class_assert.cc
action/action_class_template.cc
action/action_class_trigger.cc
action/action_class_when.cc
action/action_class_concept.cc
action/action_class_hash_array.cc
action/action_class_set.cc
action/action_class_set_sarray.cc
action/action_class_set_darray.cc
action/action_class_noop.cc
action/action_class_write.cc
action/action_class_print.cc
action/action_class_close.cc
action/action_class_variable.cc
action/action_class_modify.cc
action/action_class_transient_darray.cc
action/action_class_set_missing.cc

eccodes.cc
grib_concept.cc
grib_hash_array.cc
Expand Down Expand Up @@ -238,7 +242,6 @@ list( APPEND eccodes_src_files
accessor/grib_accessor_class_proj_string.cc
grib_jasper_encoding.cc
grib_openjpeg_encoding.cc
action_class_set_missing.cc
accessor/grib_accessor_class_number_of_points.cc
accessor/grib_accessor_class_suppressed.cc
grib_index.cc
Expand Down
127 changes: 62 additions & 65 deletions src/accessor/grib_accessor_class_bufr_data_array.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1652,16 +1652,13 @@ void grib_accessor_bufr_data_array_t::push_zero_element(grib_darray* dval)

grib_accessor* grib_accessor_bufr_data_array_t::create_attribute_variable(const char* name, grib_section* section, int type, char* sval, double dval, long lval, unsigned long flags)
{
grib_action creator = {
0,
};
grib_action creator;
size_t len;
creator.op = (char*)"variable";
creator.name_space = (char*)"";
creator.flags = GRIB_ACCESSOR_FLAG_READ_ONLY | flags;
creator.set = 0;

creator.name = (char*)name;
creator.op_ = (char*)"variable";
creator.name_space_ = (char*)"";
creator.flags_ = GRIB_ACCESSOR_FLAG_READ_ONLY | flags;
creator.set_ = 0;
creator.name_ = (char*)name;
grib_accessor* a = grib_accessor_factory(section, &creator, 0, NULL);
a->parent_ = NULL;
a->h_ = section->h;
Expand Down Expand Up @@ -1692,70 +1689,70 @@ static void set_creator_name(grib_action* creator, int code)
{
switch (code) {
case 222000:
creator->name = (char*)"qualityInformationFollows";
creator->name_ = (char*)"qualityInformationFollows";
break;
case 223000:
creator->name = (char*)"substitutedValuesOperator";
creator->name_ = (char*)"substitutedValuesOperator";
break;
case 223255:
creator->name = (char*)"substitutedValue";
creator->name_ = (char*)"substitutedValue";
break;
case 224000:
creator->name = (char*)"firstOrderStatiticalValuesFollow";
creator->name_ = (char*)"firstOrderStatiticalValuesFollow";
break;
case 224255:
creator->name = (char*)"firstOrderStatisticalValue";
creator->name_ = (char*)"firstOrderStatisticalValue";
break;
case 225000:
creator->name = (char*)"differenceStatisticalValuesFollow";
creator->name_ = (char*)"differenceStatisticalValuesFollow";
break;
case 225255:
creator->name = (char*)"differenceStatisticalValue";
creator->name_ = (char*)"differenceStatisticalValue";
break;
case 232000:
creator->name = (char*)"replacedRetainedValuesFollow";
creator->name_ = (char*)"replacedRetainedValuesFollow";
break;
case 232255:
creator->name = (char*)"replacedRetainedValue";
creator->name_ = (char*)"replacedRetainedValue";
break;
case 235000:
creator->name = (char*)"cancelBackwardDataReference";
creator->name_ = (char*)"cancelBackwardDataReference";
break;
case 236000:
creator->name = (char*)"defineDataPresentBitmap";
creator->name_ = (char*)"defineDataPresentBitmap";
break;
case 237000:
creator->name = (char*)"useDefinedDataPresentBitmap";
creator->name_ = (char*)"useDefinedDataPresentBitmap";
break;
case 237255:
creator->name = (char*)"cancelUseDefinedDataPresentBitmap";
creator->name_ = (char*)"cancelUseDefinedDataPresentBitmap";
break;
case 241000:
creator->name = (char*)"defineEvent";
creator->name_ = (char*)"defineEvent";
break;
case 241255:
creator->name = (char*)"cancelDefineEvent";
creator->name_ = (char*)"cancelDefineEvent";
break;
case 242000:
creator->name = (char*)"defineConditioningEvent";
creator->name_ = (char*)"defineConditioningEvent";
break;
case 242255:
creator->name = (char*)"canceDefineConditioningEvent";
creator->name_ = (char*)"canceDefineConditioningEvent";
break;
case 243000:
creator->name = (char*)"categoricalForecastValuesFollow";
creator->name_ = (char*)"categoricalForecastValuesFollow";
break;
case 243255:
creator->name = (char*)"cancelCategoricalForecastValuesFollow";
creator->name_ = (char*)"cancelCategoricalForecastValuesFollow";
break;
case 999999:
creator->name = (char*)"associatedField";
creator->name_ = (char*)"associatedField";
break;
default:
if (code > 204999 && code < 206000)
creator->name = (char*)"text";
creator->name_ = (char*)"text";
else
creator->name = (char*)"operator";
creator->name_ = (char*)"operator";
break;
}
}
Expand All @@ -1779,42 +1776,42 @@ grib_accessor* grib_accessor_bufr_data_array_t::create_accessor_from_descriptor(
char* temp_str = NULL;
int idx = 0;
unsigned long flags = GRIB_ACCESSOR_FLAG_READ_ONLY;
grib_action operatorCreator = {0,};
grib_action operatorCreator;
grib_accessor* accessor = NULL;
grib_accessor_bufr_data_element_t* elementAccessor = NULL;
grib_accessor_variable_t* variableAccessor = NULL;
grib_action creator = {0,};
creator.op = (char*)"bufr_data_element";
creator.name_space = (char*)"";
creator.set = 0;
grib_action creator;
creator.op_ = (char*)"bufr_data_element";
creator.name_space_ = (char*)"";
creator.set_ = 0;

operatorCreator.op = (char*)"variable";
operatorCreator.name_space = (char*)"";
operatorCreator.flags = GRIB_ACCESSOR_FLAG_READ_ONLY;
operatorCreator.set = 0;
operatorCreator.name = (char*)"operator";
operatorCreator.op_ = (char*)"variable";
operatorCreator.name_space_ = (char*)"";
operatorCreator.flags_ = GRIB_ACCESSOR_FLAG_READ_ONLY;
operatorCreator.set_ = 0;
operatorCreator.name_ = (char*)"operator";

if (attribute) {
DEBUG_ASSERT(attribute->parent_ == NULL);
}

if (add_dump_flag) {
creator.flags = GRIB_ACCESSOR_FLAG_DUMP;
operatorCreator.flags |= GRIB_ACCESSOR_FLAG_DUMP;
creator.flags_ = GRIB_ACCESSOR_FLAG_DUMP;
operatorCreator.flags_ |= GRIB_ACCESSOR_FLAG_DUMP;
}
if (add_coord_flag) {
creator.flags |= GRIB_ACCESSOR_FLAG_BUFR_COORD; // ECC-1611
creator.flags_ |= GRIB_ACCESSOR_FLAG_BUFR_COORD; // ECC-1611
}

idx = compressedData_ ? elementsDescriptorsIndex_->v[0]->v[ide] : elementsDescriptorsIndex_->v[subset]->v[ide];

switch (expanded_->v[idx]->F) {
case 0:
case 1:
creator.name = grib_context_strdup(context_, expanded_->v[idx]->shortName);
creator.name_ = grib_context_strdup(context_, expanded_->v[idx]->shortName);

/* ECC-325: store alloc'd string (due to strdup) for clean up later */
grib_sarray_push(tempStrings_, creator.name);
grib_sarray_push(tempStrings_, creator.name_);
accessor = grib_accessor_factory(section, &creator, 0, NULL);
if (canBeMissing_[idx])
accessor->flags_ |= GRIB_ACCESSOR_FLAG_CAN_BE_MISSING;
Expand Down Expand Up @@ -2264,9 +2261,7 @@ int grib_accessor_bufr_data_array_t::create_keys(long onlySubset, long startSubs
int add_extra_attributes = 1;

grib_accessor* gaGroup = 0;
grib_action creatorGroup = {
0,
};
grib_action creatorGroup;
grib_accessor* significanceQualifierGroup[NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES] = {
0,
};
Expand Down Expand Up @@ -2295,11 +2290,11 @@ int grib_accessor_bufr_data_array_t::create_keys(long onlySubset, long startSubs
int add_dump_flag = 1, add_coord_flag = 0, count = 0;
/*int forceGroupClosure=0;*/

creatorGroup.op = (char*)"bufr_group";
creatorGroup.name = (char*)"groupNumber";
creatorGroup.name_space = (char*)"";
creatorGroup.flags = GRIB_ACCESSOR_FLAG_DUMP;
creatorGroup.set = 0;
creatorGroup.op_ = (char*)"bufr_group";
creatorGroup.name_ = (char*)"groupNumber";
creatorGroup.name_space_ = (char*)"";
creatorGroup.flags_ = GRIB_ACCESSOR_FLAG_DUMP;
creatorGroup.set_ = 0;

if (dataAccessors_) {
grib_accessors_list_delete(c, dataAccessors_);
Expand Down Expand Up @@ -2349,7 +2344,8 @@ int grib_accessor_bufr_data_array_t::create_keys(long onlySubset, long startSubs
associatedFieldAccessor = NULL;
if (associatedFieldSignificanceAccessor) {
associatedFieldSignificanceAccessor->destroy(c);
associatedFieldSignificanceAccessor = NULL;
delete associatedFieldSignificanceAccessor;
associatedFieldSignificanceAccessor = nullptr;
}
for (ide = 0; ide < elementsInSubset; ide++) {
idx = compressedData_ ? elementsDescriptorsIndex_->v[0]->v[ide] : elementsDescriptorsIndex_->v[iss]->v[ide];
Expand Down Expand Up @@ -2488,15 +2484,13 @@ int grib_accessor_bufr_data_array_t::create_keys(long onlySubset, long startSubs
if (ide == 0 && !compressedData_) {
long subsetNumber = iss + 1;
size_t len = 1;
grib_action creatorsn = {
0,
};
creatorsn.op = (char*)"variable";
creatorsn.name_space = (char*)"";
creatorsn.flags = GRIB_ACCESSOR_FLAG_READ_ONLY | GRIB_ACCESSOR_FLAG_DUMP;
creatorsn.set = 0;

creatorsn.name = (char*)"subsetNumber";
grib_action creatorsn;
creatorsn.op_ = (char*)"variable";
creatorsn.name_space_ = (char*)"";
creatorsn.flags_ = GRIB_ACCESSOR_FLAG_READ_ONLY | GRIB_ACCESSOR_FLAG_DUMP;
creatorsn.set_ = 0;

creatorsn.name_ = (char*)"subsetNumber";
grib_accessor* a = grib_accessor_factory(section, &creatorsn, 0, NULL);
grib_accessor_variable_t* asn = dynamic_cast<grib_accessor_variable_t*>(a);
asn->accessor_variable_set_type(GRIB_TYPE_LONG);
Expand Down Expand Up @@ -2550,8 +2544,11 @@ int grib_accessor_bufr_data_array_t::create_keys(long onlySubset, long startSubs
}
break;
case 31021:
if (associatedFieldSignificanceAccessor)
if (associatedFieldSignificanceAccessor) {
associatedFieldSignificanceAccessor->destroy(c);
delete associatedFieldSignificanceAccessor;
associatedFieldSignificanceAccessor = nullptr;
}
associatedFieldSignificanceAccessor = elementAccessor;
break;
/*case 33007:*/
Expand Down
14 changes: 7 additions & 7 deletions src/accessor/grib_accessor_class_bufr_data_element.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,12 @@ grib_accessor* grib_accessor_bufr_data_element_t::make_clone(grib_section* s, in
grib_accessor_bufr_data_element_t* elementAccessor;
char* copied_name = NULL;
int i;
grib_action creator = {
0,
};
creator.op = (char*)"bufr_data_element";
creator.name_space = (char*)"";
creator.set = 0;
creator.name = (char*)"unknown";
grib_action creator;

creator.op_ = (char*)"bufr_data_element";
creator.name_space_ = (char*)"";
creator.set_ = 0;
creator.name_ = (char*)"unknown";
if (strcmp(class_name_, "bufr_data_element")) {
grib_context_log(context_, GRIB_LOG_FATAL, "wrong accessor type: '%s' should be '%s'", class_name_, "bufr_data_element");
}
Expand Down Expand Up @@ -446,6 +445,7 @@ void grib_accessor_bufr_data_element_t::destroy(grib_context* ct)
/*grib_context_log(ct,GRIB_LOG_DEBUG,"deleting attribute %s->%s",a->name,attributes_ [i]->name);*/
/*printf("bufr_data_element destroy %s %p\n", a->attributes_[i]->name, (void*)attributes_ [i]);*/
attributes_[i]->destroy(ct);
delete attributes_[i];
attributes_[i] = NULL;
i++;
}
Expand Down
8 changes: 4 additions & 4 deletions src/accessor/grib_accessor_class_codetable.cc
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,14 @@ void grib_accessor_codetable_t::init(const long len, grib_arguments* params)
vvalue_ = (grib_virtual_value*)grib_context_malloc_clear(context_, sizeof(grib_virtual_value));
vvalue_->type = get_native_type();
vvalue_->length = new_len;
if (act->default_value != NULL) {
if (act->default_value_ != NULL) {
const char* p = 0;
size_t s_len = 1;
long l;
int ret = 0;
double d;
char tmp[1024];
grib_expression* expression = act->default_value->get_expression(hand, 0);
grib_expression* expression = act->default_value_->get_expression(hand, 0);
int type = expression->native_type(hand);
switch (type) {
case GRIB_TYPE_DOUBLE:
Expand Down Expand Up @@ -676,14 +676,14 @@ int grib_accessor_codetable_t::pack_string(const char* buffer, size_t* len)

if (flags_ & GRIB_ACCESSOR_FLAG_NO_FAIL) {
grib_action* act = (grib_action*)(creator_);
if (act->default_value != NULL) {
if (act->default_value_ != NULL) {
const char* p = 0;
size_t s_len = 1;
long l = 0;
int ret = 0;
double d = 0;
char tmp[1024] = {0,};
grib_expression* expression = act->default_value->get_expression(grib_handle_of_accessor(this), 0);
grib_expression* expression = act->default_value_->get_expression(grib_handle_of_accessor(this), 0);
int type = expression->native_type(grib_handle_of_accessor(this));
switch (type) {
case GRIB_TYPE_DOUBLE:
Expand Down
Loading

0 comments on commit 3aba656

Please sign in to comment.