static int evaluate_long(grib_expression *g,grib_handle* h,long* lres) { long v1=0; long v2=0; int ret; grib_expression_binop* e = (grib_expression_binop*)g; #if 0 /* DEBUGGING */ { int typeLeft, typeRight; const char* nameLeft; const char* nameRight; typeLeft = grib_expression_native_type(h, e->left); typeRight = grib_expression_native_type(h, e->right); nameLeft = grib_expression_get_name(e->left); nameRight= grib_expression_get_name(e->right); printf("eval_long nameLeft=%s (type=%d), nameRight=%s (type=%d)\n",nameLeft,typeLeft, nameRight,typeRight); grib_expression_print(h->context, g, h); printf("\n"); } #endif ret = grib_expression_evaluate_long(h,e->left,&v1); if (ret != GRIB_SUCCESS) return ret; ret = grib_expression_evaluate_long(h,e->right,&v2); if (ret != GRIB_SUCCESS) return ret; *lres=e->long_func(v1,v2); return GRIB_SUCCESS; }
static int pack_expression(grib_accessor* a, grib_expression *e){ const char* cval; int ret=0; long lval=0; size_t len = 1; char tmp[1024]; if (strcmp(e->cclass->name,"long")==0) { ret=grib_expression_evaluate_long(a->parent->h,e,&lval); ret = grib_pack_long(a,&lval,&len); } else { len = sizeof(tmp); cval = grib_expression_evaluate_string(a->parent->h,e,tmp,&len,&ret); if (ret!=GRIB_SUCCESS) { grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"grib_accessor_codetable.pack_expression: unable to evaluate string %s to be set in %s\n",grib_expression_get_name(e),a->name); return ret; } len = strlen(cval) + 1; ret = grib_pack_string(a,cval,&len); } return ret; }