Merge branch 'fix_issue_191'

Conflicts:
	test/streaming_c.cpp
This commit is contained in:
Nobuyuki Kubota
2015-01-16 21:47:13 +09:00
10 changed files with 104 additions and 45 deletions

View File

@@ -31,8 +31,8 @@ MSGPACK_API_VERSION_NAMESPACE(v1) {
inline object const& operator>> (object const& o, float& v)
{
if(o.type == type::DOUBLE) {
v = static_cast<float>(o.via.dec);
if(o.type == type::FLOAT) {
v = static_cast<float>(o.via.f64);
}
else if (o.type == type::POSITIVE_INTEGER) {
v = static_cast<float>(o.via.u64);
@@ -56,8 +56,8 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const float& v)
inline object const& operator>> (object const& o, double& v)
{
if(o.type == type::DOUBLE) {
v = o.via.dec;
if(o.type == type::FLOAT) {
v = o.via.f64;
}
else if (o.type == type::POSITIVE_INTEGER) {
v = static_cast<double>(o.via.u64);
@@ -81,14 +81,14 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const double& v)
inline void operator<< (object& o, float v)
{
o.type = type::DOUBLE;
o.via.dec = static_cast<double>(v);
o.type = type::FLOAT;
o.via.f64 = static_cast<double>(v);
}
inline void operator<< (object& o, double v)
{
o.type = type::DOUBLE;
o.via.dec = v;
o.type = type::FLOAT;
o.via.f64 = v;
}
inline void operator<< (object::with_zone& o, float v)

View File

@@ -37,7 +37,10 @@ typedef enum {
MSGPACK_OBJECT_BOOLEAN = 0x01,
MSGPACK_OBJECT_POSITIVE_INTEGER = 0x02,
MSGPACK_OBJECT_NEGATIVE_INTEGER = 0x03,
MSGPACK_OBJECT_DOUBLE = 0x04,
MSGPACK_OBJECT_FLOAT = 0x04,
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
MSGPACK_OBJECT_DOUBLE = MSGPACK_OBJECT_FLOAT, /* obsolete */
#endif /* MSGPACK_USE_LEGACY_NAME_AS_FLOAT */
MSGPACK_OBJECT_STR = 0x05,
MSGPACK_OBJECT_ARRAY = 0x06,
MSGPACK_OBJECT_MAP = 0x07,
@@ -79,7 +82,10 @@ typedef union {
bool boolean;
uint64_t u64;
int64_t i64;
double dec;
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
double dec; /* obsolete*/
#endif /* MSGPACK_USE_LEGACY_NAME_AS_FLOAT */
double f64;
msgpack_object_array array;
msgpack_object_map map;
msgpack_object_str str;
@@ -111,4 +117,3 @@ bool msgpack_object_equal(const msgpack_object x, const msgpack_object y);
#endif
#endif /* msgpack/object.h */

View File

@@ -211,7 +211,7 @@ inline void operator<< (object::with_zone& o, const object& v)
case type::BOOLEAN:
case type::POSITIVE_INTEGER:
case type::NEGATIVE_INTEGER:
case type::DOUBLE:
case type::FLOAT:
::memcpy(&o.via, &v.via, sizeof(v.via));
return;
@@ -342,8 +342,8 @@ inline bool operator==(const object& x, const object& y)
case type::NEGATIVE_INTEGER:
return x.via.i64 == y.via.i64;
case type::DOUBLE:
return x.via.dec == y.via.dec;
case type::FLOAT:
return x.via.f64 == y.via.f64;
case type::STR:
return x.via.str.size == y.via.str.size &&
@@ -590,8 +590,8 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const object& v)
o.pack_int64(v.via.i64);
return o;
case type::DOUBLE:
o.pack_double(v.via.dec);
case type::FLOAT:
o.pack_double(v.via.f64);
return o;
case type::STR:
@@ -658,8 +658,8 @@ inline std::ostream& operator<< (std::ostream& s, const object& o)
s << o.via.i64;
break;
case type::DOUBLE:
s << o.via.dec;
case type::FLOAT:
s << o.via.f64;
break;
case type::STR:

View File

@@ -36,7 +36,10 @@ namespace type {
BOOLEAN = MSGPACK_OBJECT_BOOLEAN,
POSITIVE_INTEGER = MSGPACK_OBJECT_POSITIVE_INTEGER,
NEGATIVE_INTEGER = MSGPACK_OBJECT_NEGATIVE_INTEGER,
DOUBLE = MSGPACK_OBJECT_DOUBLE,
FLOAT = MSGPACK_OBJECT_FLOAT,
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
DOUBLE = MSGPACK_OBJECT_DOUBLE, // obsolete
#endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
STR = MSGPACK_OBJECT_STR,
BIN = MSGPACK_OBJECT_BIN,
ARRAY = MSGPACK_OBJECT_ARRAY,
@@ -81,7 +84,10 @@ struct object {
bool boolean;
uint64_t u64;
int64_t i64;
double dec;
#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
double dec; // obsolete
#endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
double f64;
object_array array;
object_map map;
object_str str;

View File

@@ -226,10 +226,10 @@ inline void unpack_int64(int64_t d, object& o)
else { o.type = type::NEGATIVE_INTEGER; o.via.i64 = d; } }
inline void unpack_float(float d, object& o)
{ o.type = type::DOUBLE; o.via.dec = d; }
{ o.type = type::FLOAT; o.via.f64 = d; }
inline void unpack_double(double d, object& o)
{ o.type = type::DOUBLE; o.via.dec = d; }
{ o.type = type::FLOAT; o.via.f64 = d; }
inline void unpack_nil(object& o)
{ o.type = type::NIL; }