mirror of https://github.com/ecmwf/eccodes.git
fix for flat format
This commit is contained in:
parent
b23406949e
commit
d0e609065c
|
@ -53,6 +53,7 @@
|
|||
MEMBERS = int bitmapStart
|
||||
MEMBERS = int bitmapCurrent
|
||||
MEMBERS = grib_accessors_list* dataAccessors
|
||||
MEMBERS = int unpackMode
|
||||
|
||||
END_CLASS_DEF
|
||||
|
||||
|
@ -115,6 +116,7 @@ typedef struct grib_accessor_bufr_data_array {
|
|||
int bitmapStart;
|
||||
int bitmapCurrent;
|
||||
grib_accessors_list* dataAccessors;
|
||||
int unpackMode;
|
||||
} grib_accessor_bufr_data_array;
|
||||
|
||||
extern grib_accessor_class* grib_accessor_class_gen;
|
||||
|
@ -246,6 +248,7 @@ static void init(grib_accessor* a,const long v, grib_arguments* params)
|
|||
a->parent->h->unpacked=0;
|
||||
|
||||
a->length = init_length(a);
|
||||
self->unpackMode=CODES_BUFR_UNPACK_STRUCTURE;
|
||||
|
||||
/* Assert(a->length>=0); */
|
||||
}
|
||||
|
@ -307,6 +310,11 @@ grib_accessors_list* accessor_bufr_data_array_get_dataAccessors(grib_accessor* a
|
|||
return self->dataAccessors;
|
||||
}
|
||||
|
||||
void accessor_bufr_data_array_set_unpackMode(grib_accessor* a,int unpackMode) {
|
||||
grib_accessor_bufr_data_array *self =(grib_accessor_bufr_data_array*)a;
|
||||
self->unpackMode=unpackMode;
|
||||
}
|
||||
|
||||
static int get_descriptors(grib_accessor* a) {
|
||||
grib_accessor_bufr_data_array *self =(grib_accessor_bufr_data_array*)a;
|
||||
int ret=0,i,numberOfDescriptors;
|
||||
|
@ -827,7 +835,8 @@ static int create_keys(grib_accessor* a) {
|
|||
|
||||
descriptor=self->expanded->v[idx];
|
||||
elementFromBitmap=NULL;
|
||||
if (descriptor->F==0 && IS_QUALIFIER(descriptor->X)) {
|
||||
if (descriptor->F==0 && IS_QUALIFIER(descriptor->X)
|
||||
&& self->unpackMode==CODES_BUFR_UNPACK_STRUCTURE) {
|
||||
int sidx=significanceQualifierIndex(descriptor->X,descriptor->Y);
|
||||
groupNumber++;
|
||||
|
||||
|
@ -922,7 +931,8 @@ static int create_keys(grib_accessor* a) {
|
|||
}
|
||||
|
||||
elementAccessor=create_accessor_from_descriptor(a,section,ide,iss,dump);
|
||||
if (elementFromBitmap) grib_accessor_add_attribute(elementFromBitmap,elementAccessor);
|
||||
if (elementFromBitmap && self->unpackMode==CODES_BUFR_UNPACK_STRUCTURE)
|
||||
grib_accessor_add_attribute(elementFromBitmap,elementAccessor);
|
||||
else if (elementAccessor) {
|
||||
grib_push_accessor(elementAccessor,section->block);
|
||||
grib_accessors_list_push(self->dataAccessors,elementAccessor);
|
||||
|
|
|
@ -136,47 +136,6 @@ static void init_class(grib_accessor_class* c)
|
|||
|
||||
/* END_CLASS_IMP */
|
||||
|
||||
/*TODO move all those typedef in a unique .h file*/
|
||||
typedef struct grib_accessor_bufr_compressed_data {
|
||||
grib_accessor att;
|
||||
/* Members defined in gen */
|
||||
/* Members defined in bufr_compressed_data */
|
||||
const char* offsetSection4Name;
|
||||
const char* offsetBeforeDataName;
|
||||
const char* offsetEndSection4Name;
|
||||
const char* section4LengthName;
|
||||
const char* numberOfSubsetsName;
|
||||
const char* subsetNumberName;
|
||||
const char* expandedDescriptorsName;
|
||||
const char* elementsName;
|
||||
const char* abbreviationName;
|
||||
const char* typeName;
|
||||
const char* nameName;
|
||||
const char* unitName;
|
||||
const char* referenceName;
|
||||
const char* scaleName;
|
||||
const char* widthName;
|
||||
const char* codeFlags;
|
||||
long* code;
|
||||
long* expandedDescriptors;
|
||||
char** abbreviation;
|
||||
int* index;
|
||||
grib_trie* abbreviationTrie;
|
||||
char** type;
|
||||
char** names;
|
||||
char** units;
|
||||
long* reference;
|
||||
long* scale;
|
||||
long* width;
|
||||
long numberOfElements;
|
||||
long numberOfSubsets;
|
||||
size_t numberOfDescriptors;
|
||||
double* values;
|
||||
int* is_constant;
|
||||
double* constant;
|
||||
int dirty;
|
||||
} grib_accessor_bufr_compressed_data;
|
||||
|
||||
static void init(grib_accessor* a, const long len, grib_arguments* params) {
|
||||
|
||||
char* key;
|
||||
|
@ -241,9 +200,14 @@ static int get_native_type(grib_accessor* a){
|
|||
|
||||
static int pack_long (grib_accessor* a, const long* val, size_t *len)
|
||||
{
|
||||
int unpackMode=CODES_BUFR_UNPACK_STRUCTURE;
|
||||
grib_accessor_unpack_bufr_values* self = (grib_accessor_unpack_bufr_values*)a;
|
||||
grib_accessor* data=(grib_accessor*)self->data_accessor;
|
||||
|
||||
if (*val==2) unpackMode=CODES_BUFR_UNPACK_FLAT;
|
||||
|
||||
accessor_bufr_data_array_set_unpackMode(data,unpackMode);
|
||||
|
||||
return grib_unpack_double(data,0,0);
|
||||
}
|
||||
|
||||
|
|
|
@ -199,6 +199,9 @@ extern "C" {
|
|||
#define CODES_GRIB 1
|
||||
#define CODES_BUFR 2
|
||||
|
||||
#define CODES_BUFR_UNPACK_STRUCTURE 0
|
||||
#define CODES_BUFR_UNPACK_FLAT 1
|
||||
|
||||
#define MAX_SMART_TABLE_COLUMNS 20
|
||||
#define MAX_CODETABLE_ENTRIES 65536
|
||||
|
||||
|
|
|
@ -263,6 +263,7 @@ size_t grib_viarray_used_size(grib_viarray *v);
|
|||
|
||||
/* grib_accessor_class_bufr_data_array.c */
|
||||
grib_accessors_list *accessor_bufr_data_array_get_dataAccessors(grib_accessor *a);
|
||||
void accessor_bufr_data_array_set_unpackMode(grib_accessor *a, int unpackMode);
|
||||
|
||||
/* grib_accessor_class_bufr_data_element.c */
|
||||
void accessor_bufr_data_element_set_index(grib_accessor *a, long index);
|
||||
|
|
|
@ -161,9 +161,23 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
|
|||
grib_set_flag(h,options->print_keys[i].name,GRIB_ACCESSOR_FLAG_DUMP);
|
||||
|
||||
if (json) {
|
||||
grib_set_long(h,"unpack",1);
|
||||
if (options->handle_count>1) fprintf(stdout,",\n");
|
||||
/* fprintf(stdout,"\"message%d\" : ",options->handle_count); */
|
||||
switch (json_option[0]) {
|
||||
case 'f':
|
||||
grib_set_long(h,"unpack",2);
|
||||
a=grib_find_accessor(h,"numericValues");
|
||||
al=accessor_bufr_data_array_get_dataAccessors(a);
|
||||
grib_dump_bufr_flat(al,h,stdout,options->dump_mode,options->dump_flags,0);
|
||||
break;
|
||||
case 's':
|
||||
grib_set_long(h,"unpack",1);
|
||||
grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0);
|
||||
break;
|
||||
default :
|
||||
printf("unknown json option %s\n",json_option);
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
sprintf(tmp,"MESSAGE %d ( length=%ld )",options->handle_count,length);
|
||||
if (!grib_options_on("C"))
|
||||
|
@ -174,20 +188,6 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
|
|||
}
|
||||
}
|
||||
|
||||
switch (json_option[0]) {
|
||||
case 'f':
|
||||
a=grib_find_accessor(h,"numericValues");
|
||||
al=accessor_bufr_data_array_get_dataAccessors(a);
|
||||
grib_dump_bufr_flat(al,h,stdout,options->dump_mode,options->dump_flags,0);
|
||||
break;
|
||||
case 's':
|
||||
grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0);
|
||||
break;
|
||||
default :
|
||||
printf("unknown json option %s\n",json_option);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!strcmp(options->dump_mode,"default"))
|
||||
printf("}\n");
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue