mirror of https://github.com/ecmwf/eccodes.git
ECC-741: BUFR decode performance: add option to exclude some attributes
This commit is contained in:
parent
5e73903c29
commit
2292c12b3a
|
@ -93,5 +93,8 @@ transient userDateEnd = 0 : hidden;
|
||||||
transient userTimeEnd = 0 : hidden;
|
transient userTimeEnd = 0 : hidden;
|
||||||
meta userDateTimeEnd julian_date(userDateEnd,userTimeEnd) : hidden;
|
meta userDateTimeEnd julian_date(userDateEnd,userTimeEnd) : hidden;
|
||||||
|
|
||||||
|
# See ECC-741
|
||||||
|
transient skipExtraKeyAttributes=0 : hidden;
|
||||||
|
|
||||||
template boot_edition "bufr/boot_edition_[ed:l].def";
|
template boot_edition "bufr/boot_edition_[ed:l].def";
|
||||||
|
|
||||||
|
|
|
@ -267,16 +267,6 @@ static int is_bitmap_start_defined(grib_accessor_bufr_data_array *self)
|
||||||
return self->bitmapStart==-1 ? 0 : 1;
|
return self->bitmapStart==-1 ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int accessor_bufr_data_array_create_keys(grib_accessor* a,long onlySubset,long startSubset,long endSubset)
|
|
||||||
{
|
|
||||||
return create_keys(a,onlySubset,startSubset,endSubset);
|
|
||||||
}
|
|
||||||
|
|
||||||
int accessor_bufr_data_array_process_elements(grib_accessor* a,int flag,long onlySubset,long startSubset,long endSubset)
|
|
||||||
{
|
|
||||||
return process_elements(a,flag,onlySubset,startSubset,endSubset);
|
|
||||||
}
|
|
||||||
|
|
||||||
static size_t get_length(grib_accessor* a)
|
static size_t get_length(grib_accessor* a)
|
||||||
{
|
{
|
||||||
grib_accessor_bufr_data_array *self =(grib_accessor_bufr_data_array*)a;
|
grib_accessor_bufr_data_array *self =(grib_accessor_bufr_data_array*)a;
|
||||||
|
@ -1748,12 +1738,23 @@ static void set_creator_name(grib_action* creator,int code)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See ECC-741 */
|
||||||
|
static int adding_extra_key_attributes(grib_handle* h)
|
||||||
|
{
|
||||||
|
long skip = 0; /* default is to add */
|
||||||
|
int err = 0;
|
||||||
|
err = grib_get_long(h,"skipExtraKeyAttributes",&skip);
|
||||||
|
if (err) return 1;
|
||||||
|
return (!skip);
|
||||||
|
}
|
||||||
|
|
||||||
static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_accessor* attribute,grib_section* section,long ide,long subset,int dump,int count)
|
static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_accessor* attribute,grib_section* section,long ide,long subset,int dump,int count)
|
||||||
{
|
{
|
||||||
grib_accessor_bufr_data_array *self =(grib_accessor_bufr_data_array*)a;
|
grib_accessor_bufr_data_array *self =(grib_accessor_bufr_data_array*)a;
|
||||||
char code[10]={0,};
|
char code[10]={0,};
|
||||||
char* temp_str = NULL;
|
char* temp_str = NULL;
|
||||||
int idx=0;
|
int idx=0;
|
||||||
|
int add_extra_attributes = 1;
|
||||||
unsigned long flags=GRIB_ACCESSOR_FLAG_READ_ONLY;
|
unsigned long flags=GRIB_ACCESSOR_FLAG_READ_ONLY;
|
||||||
grib_action operatorCreator = {0, };
|
grib_action operatorCreator = {0, };
|
||||||
grib_accessor* elementAccessor=NULL;
|
grib_accessor* elementAccessor=NULL;
|
||||||
|
@ -1768,6 +1769,8 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
|
||||||
operatorCreator.set = 0;
|
operatorCreator.set = 0;
|
||||||
operatorCreator.name="operator";
|
operatorCreator.name="operator";
|
||||||
|
|
||||||
|
add_extra_attributes = adding_extra_key_attributes(grib_handle_of_accessor(a));
|
||||||
|
|
||||||
if(attribute) { DebugAssert(attribute->parent==NULL); }
|
if(attribute) { DebugAssert(attribute->parent==NULL); }
|
||||||
|
|
||||||
if (dump) {
|
if (dump) {
|
||||||
|
@ -1821,21 +1824,23 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
|
||||||
grib_sarray_push(a->context, self->tempStrings, temp_str);/* ECC-325: store alloc'd string (due to strdup) for clean up later */
|
grib_sarray_push(a->context, self->tempStrings, temp_str);/* ECC-325: store alloc'd string (due to strdup) for clean up later */
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("units",section,GRIB_TYPE_STRING,self->expanded->v[idx]->units,0,0,GRIB_ACCESSOR_FLAG_DUMP | flags);
|
if (add_extra_attributes) {
|
||||||
if (!attribute) return NULL;
|
attribute=create_attribute_variable("units",section,GRIB_TYPE_STRING,self->expanded->v[idx]->units,0,0,GRIB_ACCESSOR_FLAG_DUMP | flags);
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
if (!attribute) return NULL;
|
||||||
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("scale",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->scale,flags);
|
attribute=create_attribute_variable("scale",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->scale,flags);
|
||||||
if (!attribute) return NULL;
|
if (!attribute) return NULL;
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("reference",section,GRIB_TYPE_DOUBLE,0,self->expanded->v[idx]->reference,0,flags);
|
attribute=create_attribute_variable("reference",section,GRIB_TYPE_DOUBLE,0,self->expanded->v[idx]->reference,0,flags);
|
||||||
if (!attribute) return NULL;
|
if (!attribute) return NULL;
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("width",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->width,flags);
|
attribute=create_attribute_variable("width",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->width,flags);
|
||||||
if (!attribute) return NULL;
|
if (!attribute) return NULL;
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
set_creator_name(&creator,self->expanded->v[idx]->code);
|
set_creator_name(&creator,self->expanded->v[idx]->code);
|
||||||
|
@ -1893,21 +1898,23 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
|
||||||
if (!attribute) return NULL;
|
if (!attribute) return NULL;
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("units",section,GRIB_TYPE_STRING,self->expanded->v[idx]->units,0,0,GRIB_ACCESSOR_FLAG_DUMP);
|
if (add_extra_attributes) {
|
||||||
if (!attribute) return NULL;
|
attribute=create_attribute_variable("units",section,GRIB_TYPE_STRING,self->expanded->v[idx]->units,0,0,GRIB_ACCESSOR_FLAG_DUMP);
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
if (!attribute) return NULL;
|
||||||
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("scale",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->scale,flags);
|
attribute=create_attribute_variable("scale",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->scale,flags);
|
||||||
if (!attribute) return NULL;
|
if (!attribute) return NULL;
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("reference",section,GRIB_TYPE_DOUBLE,0,self->expanded->v[idx]->reference,0,flags);
|
attribute=create_attribute_variable("reference",section,GRIB_TYPE_DOUBLE,0,self->expanded->v[idx]->reference,0,flags);
|
||||||
if (!attribute) return NULL;
|
if (!attribute) return NULL;
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
|
||||||
attribute=create_attribute_variable("width",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->width,flags);
|
attribute=create_attribute_variable("width",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->width,flags);
|
||||||
if (!attribute) return NULL;
|
if (!attribute) return NULL;
|
||||||
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
grib_accessor_add_attribute(elementAccessor,attribute,0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue