static void post_init(grib_accessor* a) { grib_accessor_lookup* self = (grib_accessor_lookup*)a; if(self->real_name ) grib_dependency_observe_expression(a,self->real_name ); }
static int create_accessor( grib_section* p, grib_action* act, grib_loader *h) { grib_action_if* a = (grib_action_if*)act; grib_action* next = NULL; int ret = 0; long lres=0; grib_accessor* as = NULL; grib_section* gs = NULL; as = grib_accessor_factory(p, act,0,NULL); if(!as)return GRIB_INTERNAL_ERROR; gs = as->sub_section; grib_push_accessor(as,p->block); if ((ret=grib_expression_evaluate_long(p->h,a->expression,&lres)) != GRIB_SUCCESS) return ret; if(lres) next = a->block_true; else next = a->block_false; if(p->h->context->debug > 1) { printf("EVALUATE create_accessor_handle "); grib_expression_print(p->h->context,a->expression,p->h); printf(" [%s][_if%p]\n", (next == a->block_true ? "true":"false"), (void*)a); /*grib_dump_action_branch(stdout,next,5);*/ } gs->branch = next; grib_dependency_observe_expression(as,a->expression); while(next){ ret = grib_create_accessor(gs, next, h); if(ret != GRIB_SUCCESS) return ret; next= next->next; } return GRIB_SUCCESS; }
static void add_dependency(grib_expression* g, grib_accessor* observer) { grib_expression_binop* e = (grib_expression_binop*)g; grib_dependency_observe_expression(observer,e->left); grib_dependency_observe_expression(observer,e->right); }
static void add_dependency(grib_expression* g, grib_accessor* observer){ grib_expression_unop* e = (grib_expression_unop*)g; grib_dependency_observe_expression(observer,e->exp); }
static void add_dependency(grib_expression* g, grib_accessor* observer){ grib_expression_string_compare* e = (grib_expression_string_compare*)g; grib_dependency_observe_expression(observer,e->left); grib_dependency_observe_expression(observer,e->right); }