static int grib_fieldset_columns_resize(grib_fieldset* set,size_t newsize) { double* newdoubles; long* newlongs; char** newstrings; int* newerrors; int i=0; grib_context* c; if (!set || !set->columns) return GRIB_INVALID_ARGUMENT; c=set->context; if (newsize <= set->columns[0].values_array_size) return 0; for (i=0;i<set->columns_size;i++) { switch (set->columns[i].type) { case GRIB_TYPE_LONG: newlongs=(long*)grib_context_realloc(c,set->columns[i].long_values, newsize*sizeof(long)); if (!newlongs ) { grib_context_log(c, GRIB_LOG_ERROR, "grib_fieldset_columns_resize : Cannot malloc %d bytes",newsize-set->columns[i].values_array_size); return GRIB_OUT_OF_MEMORY; } else set->columns[i].long_values=newlongs; break; case GRIB_TYPE_DOUBLE: newdoubles=(double*)grib_context_realloc(c,set->columns[i].double_values, newsize*sizeof(double)); if (!newdoubles) { grib_context_log(c, GRIB_LOG_ERROR, "grib_fieldset_columns_resize : Cannot malloc %d bytes",newsize-set->columns[i].values_array_size); return GRIB_OUT_OF_MEMORY; } else set->columns[i].double_values=newdoubles; break; case GRIB_TYPE_STRING: newstrings=(char**)grib_context_realloc(c,set->columns[i].string_values, newsize*sizeof(char*)); if (!newstrings) { grib_context_log(c, GRIB_LOG_ERROR, "grib_fieldset_columns_resize : Cannot malloc %d bytes",newsize-set->columns[i].values_array_size); return GRIB_OUT_OF_MEMORY; } else set->columns[i].string_values=newstrings; break; } newerrors=(int*)grib_context_realloc(c,set->columns[i].errors,newsize*sizeof(int)); if (!newerrors) { grib_context_log(c, GRIB_LOG_ERROR, "grib_fieldset_columns_resize : Cannot malloc %d bytes", set->columns[i].errors,newsize*sizeof(int)); return GRIB_OUT_OF_MEMORY; } else set->columns[i].errors=newerrors; set->columns[i].values_array_size=newsize; } return GRIB_SUCCESS; }
grib_darray* grib_darray_resize(grib_context* c,grib_darray* v) { int newsize=v->incsize+v->size; if (!c) c=grib_context_get_default(); v->v=grib_context_realloc(c,v->v,newsize*sizeof(double)); v->size=newsize; if (!v->v) { grib_context_log(c,GRIB_LOG_ERROR, "grib_darray_resize unable to allocate %d bytes\n",sizeof(double)*newsize); return NULL; } return v; }