/* pack sphere into double and integer buffers (d and i buffers are of initial * dsize and isize, while the final numberof of doubles and ints is packed) */ void SPHERE_Pack (SPHERE *sph, int *dsize, double **d, int *doubles, int *isize, int **i, int *ints) { pack_int (isize, i, ints, sph->surface); pack_int (isize, i, ints, sph->volume); pack_doubles (dsize, d, doubles, sph->cur_center, 3); pack_doubles (dsize, d, doubles, (double*)sph->cur_point, 9); pack_double (dsize, d, doubles, sph->cur_radius); pack_doubles (dsize, d, doubles, sph->ref_center, 3); pack_doubles (dsize, d, doubles, (double*)sph->ref_point, 9); pack_double (dsize, d, doubles, sph->ref_radius); pack_int (isize, i, ints, sph->mat ? 1 : 0); /* pack material existence flag */ if (sph->mat) pack_string (isize, i, ints, sph->mat->label); }
static int pack_missing(grib_accessor* a) { grib_accessor_g2latlon* self = (grib_accessor_g2latlon*)a; double missing = GRIB_MISSING_DOUBLE; size_t size = 1; if(!self->given) return GRIB_NOT_IMPLEMENTED; return pack_double(a,&missing,&size); }
quint8 *MsgPackPrivate::pack(const QVariant &v, quint8 *p, bool wr, QVector<QByteArray> &user_data) { QMetaType::Type t = (QMetaType::Type)v.type(); if (v.isNull() && !v.isValid()) p = pack_nil(p, wr); else if (t == QMetaType::Int) p = pack_int(v.toInt(), p, wr); else if (t == QMetaType::UInt) p = pack_uint(v.toUInt(), p, wr); else if (t == QMetaType::Bool) p = pack_bool(v, p, wr); else if (t == QMetaType::QString) p = pack_string(v.toString(), p, wr); else if (t == QMetaType::QVariantList) p = pack_array(v.toList(), p, wr, user_data); else if (t == QMetaType::QStringList) p = pack_stringlist(v.toStringList(), p, wr); else if (t == QMetaType::LongLong) p = pack_longlong(v.toLongLong(), p, wr); else if (t == QMetaType::ULongLong) p = pack_ulonglong(v.toULongLong(), p, wr); else if (t == QMetaType::Double) p = pack_double(v.toDouble(), p, wr); else if (t == QMetaType::Float) p = pack_float(v.toFloat(), p, wr); else if (t == QMetaType::QByteArray) p = pack_bin(v.toByteArray(), p, wr); else if (t == QMetaType::QVariantMap) p = pack_map(v.toMap(), p, wr, user_data); else { if (t == QMetaType::User) t = (QMetaType::Type)v.userType(); QReadLocker locker(&packers_lock); bool has_packer = user_packers.contains(t); if (has_packer) has_packer &= user_packers[t].packer != 0; locker.unlock(); if (has_packer) p = pack_user(v, p, wr, user_data); else qWarning() << "MsgPack::pack can't pack type:" << t; } return p; }
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 int pack_long(grib_accessor* a, const long* val, size_t *len) { const double dval=(double)*val ; return pack_double(a, &dval,len); }
/* * double */ static void enc_double(amqp_value_t *v, mnbytestream_t *bs) { pack_double(bs, v->value.f); }