Skip to content

Commit ccc9ac5

Browse files
committed
Fixed #521.
Introduced new object type `FLOAT32` and `FLOAT64`. `FLOAT64` is equivalent to `FLOAT`. The both internal expressions are f64(double).
1 parent 1df97bc commit ccc9ac5

File tree

12 files changed

+82
-30
lines changed

12 files changed

+82
-30
lines changed

include/msgpack/object.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ typedef enum {
2929
MSGPACK_OBJECT_BOOLEAN = 0x01,
3030
MSGPACK_OBJECT_POSITIVE_INTEGER = 0x02,
3131
MSGPACK_OBJECT_NEGATIVE_INTEGER = 0x03,
32+
MSGPACK_OBJECT_FLOAT32 = 0x0a,
33+
MSGPACK_OBJECT_FLOAT64 = 0x04,
3234
MSGPACK_OBJECT_FLOAT = 0x04,
3335
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
3436
MSGPACK_OBJECT_DOUBLE = MSGPACK_OBJECT_FLOAT, /* obsolete */

include/msgpack/v1/adaptor/boost/msgpack_variant.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ struct basic_variant :
4747
bool, // BOOL
4848
int64_t, // NEGATIVE_INTEGER
4949
uint64_t, // POSITIVE_INTEGER
50-
double, // FLOAT
50+
double, // FLOAT32, FLOAT64
5151
std::string, // STR
5252
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
5353
boost::string_ref, // STR
@@ -66,7 +66,7 @@ struct basic_variant :
6666
bool, // BOOL
6767
int64_t, // NEGATIVE_INTEGER
6868
uint64_t, // POSITIVE_INTEGER
69-
double, // FLOAT
69+
double, // FLOAT32, FLOAT64
7070
std::string, // STR
7171
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
7272
boost::string_ref, // STR
@@ -286,7 +286,8 @@ struct as<type::basic_variant<STR, BIN, EXT> > {
286286
return o.as<uint64_t>();
287287
case type::NEGATIVE_INTEGER:
288288
return o.as<int64_t>();
289-
case type::FLOAT:
289+
case type::FLOAT32:
290+
case type::FLOAT64:
290291
return o.as<double>();
291292
case type::STR:
292293
return o.as<STR>();
@@ -326,7 +327,8 @@ struct convert<type::basic_variant<STR, BIN, EXT> > {
326327
case type::NEGATIVE_INTEGER:
327328
v = o.as<int64_t>();
328329
break;
329-
case type::FLOAT:
330+
case type::FLOAT32:
331+
case type::FLOAT64:
330332
v = o.as<double>();
331333
break;
332334
case type::STR:

include/msgpack/v1/adaptor/float.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace adaptor {
2727
template <>
2828
struct convert<float> {
2929
msgpack::object const& operator()(msgpack::object const& o, float& v) const {
30-
if(o.type == msgpack::type::FLOAT) {
30+
if(o.type == msgpack::type::FLOAT32 || o.type == msgpack::type::FLOAT64) {
3131
v = static_cast<float>(o.via.f64);
3232
}
3333
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
@@ -56,7 +56,7 @@ struct pack<float> {
5656
template <>
5757
struct convert<double> {
5858
msgpack::object const& operator()(msgpack::object const& o, double& v) const {
59-
if(o.type == msgpack::type::FLOAT) {
59+
if(o.type == msgpack::type::FLOAT32 || o.type == msgpack::type::FLOAT64) {
6060
v = o.via.f64;
6161
}
6262
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
@@ -85,15 +85,15 @@ struct pack<double> {
8585
template <>
8686
struct object<float> {
8787
void operator()(msgpack::object& o, float v) const {
88-
o.type = msgpack::type::FLOAT;
88+
o.type = msgpack::type::FLOAT32;
8989
o.via.f64 = static_cast<double>(v);
9090
}
9191
};
9292

9393
template <>
9494
struct object<double> {
9595
void operator()(msgpack::object& o, double v) const {
96-
o.type = msgpack::type::FLOAT;
96+
o.type = msgpack::type::FLOAT64;
9797
o.via.f64 = v;
9898
}
9999
};

include/msgpack/v1/object.hpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,11 @@ struct pack<msgpack::object> {
257257
o.pack_int64(v.via.i64);
258258
return o;
259259

260-
case msgpack::type::FLOAT:
260+
case msgpack::type::FLOAT32:
261+
o.pack_float(static_cast<float>(v.via.f64));
262+
return o;
263+
264+
case msgpack::type::FLOAT64:
261265
o.pack_double(v.via.f64);
262266
return o;
263267

@@ -311,7 +315,8 @@ struct object_with_zone<msgpack::object> {
311315
case msgpack::type::BOOLEAN:
312316
case msgpack::type::POSITIVE_INTEGER:
313317
case msgpack::type::NEGATIVE_INTEGER:
314-
case msgpack::type::FLOAT:
318+
case msgpack::type::FLOAT32:
319+
case msgpack::type::FLOAT64:
315320
std::memcpy(&o.via, &v.via, sizeof(v.via));
316321
return;
317322

@@ -438,7 +443,8 @@ inline bool operator==(const msgpack::object& x, const msgpack::object& y)
438443
case msgpack::type::NEGATIVE_INTEGER:
439444
return x.via.i64 == y.via.i64;
440445

441-
case msgpack::type::FLOAT:
446+
case msgpack::type::FLOAT32:
447+
case msgpack::type::FLOAT64:
442448
return x.via.f64 == y.via.f64;
443449

444450
case msgpack::type::STR:
@@ -698,7 +704,11 @@ inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const ms
698704
o.pack_int64(v.via.i64);
699705
return o;
700706

701-
case msgpack::type::FLOAT:
707+
case msgpack::type::FLOAT32:
708+
o.pack_float(v.via.f64);
709+
return o;
710+
711+
case msgpack::type::FLOAT64:
702712
o.pack_double(v.via.f64);
703713
return o;
704714

@@ -766,7 +776,8 @@ inline std::ostream& operator<< (std::ostream& s, const msgpack::object& o)
766776
s << o.via.i64;
767777
break;
768778

769-
case msgpack::type::FLOAT:
779+
case msgpack::type::FLOAT32:
780+
case msgpack::type::FLOAT64:
770781
s << o.via.f64;
771782
break;
772783

include/msgpack/v1/object_fwd_decl.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ namespace type {
3030
BOOLEAN = MSGPACK_OBJECT_BOOLEAN,
3131
POSITIVE_INTEGER = MSGPACK_OBJECT_POSITIVE_INTEGER,
3232
NEGATIVE_INTEGER = MSGPACK_OBJECT_NEGATIVE_INTEGER,
33+
FLOAT32 = MSGPACK_OBJECT_FLOAT32,
34+
FLOAT64 = MSGPACK_OBJECT_FLOAT64,
3335
FLOAT = MSGPACK_OBJECT_FLOAT,
3436
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
3537
DOUBLE = MSGPACK_OBJECT_DOUBLE, // obsolete

include/msgpack/v1/unpack.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,10 @@ inline void unpack_int64(int64_t d, msgpack::object& o)
184184
else { o.type = msgpack::type::NEGATIVE_INTEGER; o.via.i64 = d; } }
185185

186186
inline void unpack_float(float d, msgpack::object& o)
187-
{ o.type = msgpack::type::FLOAT; o.via.f64 = d; }
187+
{ o.type = msgpack::type::FLOAT32; o.via.f64 = d; }
188188

189189
inline void unpack_double(double d, msgpack::object& o)
190-
{ o.type = msgpack::type::FLOAT; o.via.f64 = d; }
190+
{ o.type = msgpack::type::FLOAT64; o.via.f64 = d; }
191191

192192
inline void unpack_nil(msgpack::object& o)
193193
{ o.type = msgpack::type::NIL; }

include/msgpack/v2/object_fwd_decl.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ using v1::type::NIL;
2525
using v1::type::BOOLEAN;
2626
using v1::type::POSITIVE_INTEGER;
2727
using v1::type::NEGATIVE_INTEGER;
28+
using v1::type::FLOAT32;
29+
using v1::type::FLOAT64;
2830
using v1::type::FLOAT;
2931
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
3032
using v1::type::DOUBLE;

src/objectc.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
4545
case MSGPACK_OBJECT_NEGATIVE_INTEGER:
4646
return msgpack_pack_int64(pk, d.via.i64);
4747

48-
case MSGPACK_OBJECT_FLOAT:
48+
case MSGPACK_OBJECT_FLOAT32:
49+
return msgpack_pack_float(pk, (float)d.via.f64);
50+
51+
case MSGPACK_OBJECT_FLOAT64:
4952
return msgpack_pack_double(pk, d.via.f64);
5053

5154
case MSGPACK_OBJECT_STR:
@@ -191,7 +194,8 @@ void msgpack_object_print(FILE* out, msgpack_object o)
191194
#endif
192195
break;
193196

194-
case MSGPACK_OBJECT_FLOAT:
197+
case MSGPACK_OBJECT_FLOAT32:
198+
case MSGPACK_OBJECT_FLOAT64:
195199
fprintf(out, "%f", o.via.f64);
196200
break;
197201

@@ -324,7 +328,8 @@ int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object
324328
#endif
325329
break;
326330

327-
case MSGPACK_OBJECT_FLOAT:
331+
case MSGPACK_OBJECT_FLOAT32:
332+
case MSGPACK_OBJECT_FLOAT64:
328333
ret = snprintf(aux_buffer, aux_buffer_size, "%f", o.via.f64);
329334
aux_buffer = aux_buffer + ret;
330335
aux_buffer_size = aux_buffer_size - ret;
@@ -481,7 +486,8 @@ bool msgpack_object_equal(const msgpack_object x, const msgpack_object y)
481486
case MSGPACK_OBJECT_NEGATIVE_INTEGER:
482487
return x.via.i64 == y.via.i64;
483488

484-
case MSGPACK_OBJECT_FLOAT:
489+
case MSGPACK_OBJECT_FLOAT32:
490+
case MSGPACK_OBJECT_FLOAT64:
485491
return x.via.f64 == y.via.f64;
486492

487493
case MSGPACK_OBJECT_STR:

src/unpack.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,15 +151,15 @@ static inline int template_callback_int64(unpack_user* u, int64_t d, msgpack_obj
151151
static inline int template_callback_float(unpack_user* u, float d, msgpack_object* o)
152152
{
153153
MSGPACK_UNUSED(u);
154-
o->type = MSGPACK_OBJECT_FLOAT;
154+
o->type = MSGPACK_OBJECT_FLOAT32;
155155
o->via.f64 = d;
156156
return 0;
157157
}
158158

159159
static inline int template_callback_double(unpack_user* u, double d, msgpack_object* o)
160160
{
161161
MSGPACK_UNUSED(u);
162-
o->type = MSGPACK_OBJECT_FLOAT;
162+
o->type = MSGPACK_OBJECT_FLOAT64;
163163
o->via.f64 = d;
164164
return 0;
165165
}

test/msgpack_c.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,7 @@ TEST(MSGPACKC, simple_buffer_float)
225225
msgpack_unpack_return ret =
226226
msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
227227
EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
228-
EXPECT_EQ(MSGPACK_OBJECT_FLOAT, obj.type);
229-
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
230-
EXPECT_EQ(MSGPACK_OBJECT_DOUBLE, obj.type);
231-
#endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
228+
EXPECT_EQ(MSGPACK_OBJECT_FLOAT32, obj.type);
232229
if (isnan(val)) {
233230
EXPECT_TRUE(isnan(obj.via.f64));
234231
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
@@ -290,6 +287,7 @@ TEST(MSGPACKC, simple_buffer_double)
290287
msgpack_unpack_return ret =
291288
msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
292289
EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
290+
EXPECT_EQ(MSGPACK_OBJECT_FLOAT64, obj.type);
293291
EXPECT_EQ(MSGPACK_OBJECT_FLOAT, obj.type);
294292
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
295293
EXPECT_EQ(MSGPACK_OBJECT_DOUBLE, obj.type);

0 commit comments

Comments
 (0)