static int unpack_string(grib_accessor*a , char* v, size_t *len) { int ret=0; double dval=0; long lval=0; size_t llen=1; grib_accessor_class* super = NULL; switch (get_native_type(a)) { case GRIB_TYPE_LONG: ret=unpack_long(a,&lval,&llen); sprintf(v,"%ld",lval); *len=strlen(v); break; case GRIB_TYPE_DOUBLE: ret=unpack_double(a,&dval,&llen); sprintf(v,"%g",dval); *len=strlen(v); break; default: super = *(a->cclass->super); ret = super->unpack_string(a,v,len); } return ret; }
static void dump(grib_accessor* a, grib_dumper* dumper) { switch (get_native_type(a)) { case GRIB_TYPE_STRING: grib_dump_string(dumper,a,NULL); break; case GRIB_TYPE_LONG: grib_dump_long(dumper,a,NULL); break; case GRIB_TYPE_DOUBLE: grib_dump_double(dumper,a,NULL); break; } }
static int pack_long(grib_accessor* a, const long* val, size_t *len) { grib_accessor_bits* self = (grib_accessor_bits*)a; grib_accessor* x=NULL; grib_handle* h=grib_handle_of_accessor(a); unsigned char* p=NULL; long start,length, maxval; if(*len != 1) return GRIB_WRONG_ARRAY_SIZE; if (get_native_type(a) == GRIB_TYPE_DOUBLE) { /* ECC-402 */ const double dVal = (double)(*val); return pack_double(a, &dVal, len); } start = self->start; length = self->len; x=grib_find_accessor(grib_handle_of_accessor(a),self->argument); if (!x) return GRIB_NOT_FOUND; /* Check the input value */ if (*val < 0) { grib_context_log(h->context, GRIB_LOG_ERROR, "key=%s: value cannot be negative",a->name); return GRIB_ENCODING_ERROR; } maxval = (1 << length) - 1; if (*val > maxval){ grib_context_log(h->context, GRIB_LOG_ERROR, "key=%s: Trying to encode value of %ld but the maximum allowable value is %ld (number of bits=%ld)", a->name, *val, maxval, length); return GRIB_ENCODING_ERROR; } p=h->buffer->data + grib_byte_offset(x); return grib_encode_unsigned_longb(p,*val,&start,length); }
static bool apply(type_type const & native_id) { return check_error( H5Tequal(type_type(H5Tcopy(native_id)), type_type(get_native_type(typename alps::detail::type_wrapper<T>::type()))) ) > 0; }