static int nearest_smaller_value(grib_accessor* a, double val,double* nearest) { int ret=0; if (grib_nearest_smaller_ibm_float(val,nearest)==GRIB_INTERNAL_ERROR) { grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"grib_nearest_smaller_ibm_float overflow value=%g\n",val); grib_dump_content(a->parent->h,stderr,"wmo",GRIB_DUMP_FLAG_HEXADECIMAL,0); ret=GRIB_INTERNAL_ERROR; } return ret; }
void codes_dump_content(grib_handle* h,FILE* out,const char* mode, unsigned long option_flags,void* arg) { grib_dump_content(h, out, mode, option_flags, arg); }
int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0); return 0; }
static int notify_change(grib_action* act, grib_accessor * notified, grib_accessor* changed) { grib_loader loader = { 0,}; grib_section *old_section = NULL; grib_handle *h = notified->parent->h; size_t len = 0; size_t size = 0; int err=0; grib_handle* tmp_handle; int doit = 0; grib_action* la = NULL; grib_context_log(h->context, GRIB_LOG_DEBUG,"------------- SECTION action %s (%s) is triggerred by [%s]", act->name, notified->name, changed->name); la = grib_action_reparse(act,notified,&doit); old_section = notified->sub_section; Assert(old_section); Assert(old_section->h == h); /* printf("old = %p\n",(void*)old_section->branch); */ /* printf("new = %p\n",(void*)la); */ grib_context_log(h->context, GRIB_LOG_DEBUG,"------------- DOIT %ld OLD %p NEW %p", doit,old_section->branch,la); if(!doit) { if(la != NULL || old_section->branch != NULL) if(la == old_section->branch) { grib_context_log(h->context,GRIB_LOG_DEBUG,"IGNORING TRIGGER action %s (%s) is triggerred %p", act->name, notified->name ,(void*)la); return GRIB_SUCCESS; } } loader.list_is_resized = (la == old_section->branch); if (!strcmp(changed->name,"GRIBEditionNumber")) loader.changing_edition=1; else loader.changing_edition=0; old_section->branch = la; tmp_handle = grib_new_handle(h->context); if(!tmp_handle) return GRIB_OUT_OF_MEMORY; tmp_handle->buffer = grib_create_growable_buffer(h->context); Assert(tmp_handle->buffer); /* FIXME */ loader.data = h; loader.lookup_long = grib_lookup_long_from_handle; loader.init_accessor = grib_init_accessor_from_handle; Assert(h->kid == NULL); tmp_handle->loader = &loader; tmp_handle->main = h; h->kid = tmp_handle; /* printf("tmp_handle- main %p %p\n",(void*)tmp_handle,(void*)h); */ grib_context_log(h->context,GRIB_LOG_DEBUG,"------------- CREATE TMP BLOCK ", act->name, notified->name); tmp_handle->root = grib_section_create(tmp_handle,NULL); tmp_handle->use_trie=1; err=grib_create_accessor(tmp_handle->root, act, &loader); grib_section_adjust_sizes(tmp_handle->root,1,0); grib_section_post_init(tmp_handle->root); /* grib_recompute_sections_lengths(tmp_handle->root); */ grib_get_block_length(tmp_handle->root,&len); grib_context_log(h->context,GRIB_LOG_DEBUG,"------------- TMP BLOCK IS sectlen=%d buffer=%d", len, tmp_handle->buffer->ulength); #if 0 if(h->context->debug > 10) grib_dump_content(tmp_handle,stdout,NULL,0,NULL); #endif /* Assert(tmp_handle->buffer->ulength == len); */ /* grib_empty_section(h->context,old_section); */ grib_buffer_replace(notified, tmp_handle->buffer->data, tmp_handle->buffer->ulength,0,1); grib_swap_sections(old_section, tmp_handle->root->block->first->sub_section); Assert(tmp_handle->dependencies == NULL); /* printf("grib_handle_delete %p\n",(void*)tmp_handle); */ grib_handle_delete(tmp_handle); h->use_trie = 1; h->trie_invalid=1; h->kid = NULL; grib_section_adjust_sizes(h->root,1,0); grib_section_post_init(h->root); grib_get_block_length(old_section,&size); grib_context_log(h->context,GRIB_LOG_DEBUG,"------------- BLOCK SIZE %ld, buffer len=%ld", size,len); if(h->context->debug > 10) grib_dump_content(h,stdout,"debug",~0,NULL); Assert(size == len); grib_update_paddings(old_section); return err; }