ECC-327: bufr_dump -EC (all tests pass)

This commit is contained in:
Shahram Najm 2016-09-02 11:08:15 +01:00
parent bd68931b64
commit 072462a3a7
5 changed files with 41 additions and 33 deletions

View File

@ -389,6 +389,12 @@ int codes_set_long_array(grib_handle* h, const char* key, const long* vals, size
{
return grib_set_long_array(h,key,vals,length);
}
int codes_set_string_array(grib_handle *h, const char *key, const char **vals, size_t length)
{
return grib_set_string_array(h, key, vals, length);
}
int codes_set_values(grib_handle* h,grib_values* grib_values , size_t arg_count)
{
return grib_set_values(h,grib_values,arg_count);

View File

@ -910,6 +910,18 @@ int codes_set_force_double_array(codes_handle* h, const char* key, const double*
* @return 0 if OK, integer value on error
*/
int codes_set_long_array(codes_handle* h, const char* key, const long* vals, size_t length);
/**
* Set a string array from a key. If several keys of the same name are present, the last one is set
* @see codes_get_long_array
*
* @param h : the handle to set the data to
* @param key : the key to be searched
* @param vals : the address of a string array where the data will be read
* @param length : a size_t that contains the length of the array on input
* @return 0 if OK, integer value on error
*/
int codes_set_string_array(codes_handle *h, const char *key, const char **vals, size_t length);
/*! @} */

View File

@ -924,6 +924,18 @@ int grib_set_force_double_array(grib_handle* h, const char* key, const double* v
* @return 0 if OK, integer value on error
*/
int grib_set_long_array (grib_handle* h, const char* key , const long* vals , size_t length);
/**
* Set a string array from a key. If several keys of the same name are present, the last one is set
* @see grib_get_string_array
*
* @param h : the handle to set the data to
* @param key : the key to be searched
* @param vals : the address of a string array where the data will be read
* @param length : a size_t that contains the length of the array on input
* @return 0 if OK, integer value on error
*/
int grib_set_string_array(grib_handle* h, const char *key, const char **vals, size_t length);
/*! @} */

View File

@ -547,13 +547,11 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm
return;
}
fprintf(self->dumper.out," if(allocated(svalues)) deallocate(svalues)\n");
fprintf(self->dumper.out," allocate(svalues(%lu))\n", (unsigned long)size);
fprintf(self->dumper.out," svalues=(/");
fprintf(self->dumper.out," free(svalues);\n");
fprintf(self->dumper.out," svalues = (char**)malloc(%lu * sizeof(char*));\n", (unsigned long)size);
fprintf(self->dumper.out," size = %lu;\n", size);
self->empty=0;
values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
if (!values) {
grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
@ -561,17 +559,16 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm
}
err = grib_unpack_string_array(a,values,&size);
for (i=0;i<size-1;i++) {
fprintf(self->dumper.out," \"%s\", &\n",values[i]);
fprintf(self->dumper.out," svalues[%lu]=\"%s\"; \n", i, values[i]);
}
fprintf(self->dumper.out," \"%s\" /)\n",values[i]);
fprintf(self->dumper.out," svalues[%lu]=\"%s\";\n", i, values[i]);
if (self->isLeaf==0) {
if ((r=compute_key_rank(h,self->keys,a->name))!=0)
fprintf(self->dumper.out," call codes_set_string_array(ibufr,'#%d#%s',svalues)\n",r,a->name);
fprintf(self->dumper.out," codes_set_string_array(h, \"#%d#%s\", (const char **)svalues, size);\n",r,a->name);
else
fprintf(self->dumper.out," call codes_set_string_array(ibufr,'%s',svalues)\n",a->name);
fprintf(self->dumper.out," codes_set_string_array(h, \"%s\", (const char **)svalues, size);\n",a->name);
}
if (self->isLeaf==0) {
@ -629,12 +626,11 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment)
if (self->isLeaf==0) {
depth+=2;
if (r!=0)
fprintf(self->dumper.out," call codes_set(ibufr,'#%d#%s',",r,a->name);
fprintf(self->dumper.out," codes_set_string(h, \"#%d#%s\", ", r, a->name);
else
fprintf(self->dumper.out," call codes_set(ibufr,'%s',",a->name);
fprintf(self->dumper.out," codes_set_string(h, \"%s\", ", a->name);
}
fprintf(self->dumper.out,"\'%s\')\n",value);
fprintf(self->dumper.out,"\"%s\", &size);\n",value);
if (self->isLeaf==0) {
char* prefix;

View File

@ -21,25 +21,7 @@ tempBufr=outfile.bufr
tempDir=${label}.dir
mkdir -p $tempDir
#bufr_files=`cat ${data_dir}/bufr/bufr_data_files.txt`
bufr_files="
207003.bufr ascs_139.bufr b006_96.bufr goga_89.bufr new.bufr soil_7.bufr
aaen_55.bufr aseh_139.bufr btem_109.bufr hirb_55.bufr nomi_206.bufr ssbt_127.bufr
aben_55.bufr asel_139.bufr cmwi_87.bufr hirs_55.bufr ocea_131.bufr stuk_7.bufr
ahws_139.bufr ashs_139.bufr cmwn_87.bufr ias1_240.bufr ocea_21.bufr syno_1.bufr
airs_57.bufr atap_55.bufr cori_156.bufr iasi_241.bufr pilo_91.bufr syno_2.bufr
alws_139.bufr ateu_155.bufr crit_202.bufr itwt_233.bufr profiler_european.bufr syno_3.bufr
amsa_55.bufr atms_201.bufr csrh_189.bufr jaso_214.bufr rada_250.bufr syno_4.bufr
amsb_55.bufr atov_55.bufr emsg_189.bufr maer_207.bufr rado_250.bufr syno_multi.bufr
amse_55.bufr avhm_87.bufr emsg_87.bufr mhen_55.bufr s4kn_165.bufr temp-land-with-substituted-values.bufr
amsu_55.bufr avhn_87.bufr euwv_87.bufr mhsa_55.bufr sb19_206.bufr temp_101.bufr
amv2_87.bufr avhr_58.bufr fy3a_154.bufr mhsb_55.bufr sbu8_206.bufr tmr7_129.bufr
amv3_87.bufr b002_95.bufr fy3b_154.bufr mhse_55.bufr smin_49.bufr uegabe.bufr
asbh_139.bufr b002_96.bufr g2to_206.bufr mloz_206.bufr smis_49.bufr
asbl_139.bufr b003_56.bufr go15_87.bufr modi_87.bufr smiu_49.bufr
asca_139.bufr b005_87.bufr goee_87.bufr modw_87.bufr smos_203.bufr
asch_139.bufr b005_89.bufr goes_87.bufr monw_87.bufr sn4k_165.bufr
"
bufr_files=`cat ${data_dir}/bufr/bufr_data_files.txt`
# pkgconfig should be one level above the test dir
PKGCONFIG_FILE=../eccodes.pc