From 05e28752f111f6faa8b61432a7063a30b9f51ebf Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 25 Apr 2010 01:57:05 +0900 Subject: cpp: MSGPACK_DEFINE defines T::msgpack_object(object*, zone*) --- cpp/msgpack/object.hpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'cpp/msgpack/object.hpp') diff --git a/cpp/msgpack/object.hpp b/cpp/msgpack/object.hpp index df1079b..bfbaeb1 100644 --- a/cpp/msgpack/object.hpp +++ b/cpp/msgpack/object.hpp @@ -106,7 +106,7 @@ private: public: // FIXME private? - struct object_zone; + struct with_zone; public: implicit_type convert() const; @@ -117,11 +117,11 @@ struct object_kv { object val; }; -struct object::object_zone : object { - object_zone(msgpack::zone* zone) : zone(zone) { } +struct object::with_zone : object { + with_zone(msgpack::zone* zone) : zone(zone) { } msgpack::zone* zone; private: - object_zone(); + with_zone(); }; @@ -142,6 +142,10 @@ packer& operator<< (packer& o, const T& v); template T& operator>> (object o, T& v); +// deconvert operator +template +void operator<< (object::with_zone& o, const T& v); + struct object::implicit_type { implicit_type(object o) : obj(o) { } @@ -206,6 +210,12 @@ inline packer& operator<< (packer& o, const T& v) return o; } +template +void operator<< (object::with_zone& o, const T& v) +{ + v.msgpack_object(static_cast(&o), o.zone); +} + inline bool operator!=(const object x, const object y) { return !(x == y); } @@ -253,14 +263,14 @@ inline object::object(const T& v) template inline object& object::operator=(const T& v) { - *this << v; + *this = object(v); return *this; } template object::object(const T& v, zone* z) { - object_zone oz(z); + with_zone oz(z); oz << v; type = oz.type; via = oz.via; -- cgit v1.2.1