summaryrefslogtreecommitdiff
path: root/cpp/msgpack/object.hpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-04-25 01:12:25 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-04-25 01:12:25 +0900
commit4e85ebbf9863201107a8f5c68fdabc92749e04fc (patch)
treec1c5e8a8f45400216267b220eecad7d47c448d28 /cpp/msgpack/object.hpp
parent120e8bffd7917e9529229e796b21ececc51df016 (diff)
downloadmsgpack-python-4e85ebbf9863201107a8f5c68fdabc92749e04fc.tar.gz
cpp: object::object(const T& v, zone* z)
Diffstat (limited to 'cpp/msgpack/object.hpp')
-rw-r--r--cpp/msgpack/object.hpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/cpp/msgpack/object.hpp b/cpp/msgpack/object.hpp
index 0125d0a..a094c56 100644
--- a/cpp/msgpack/object.hpp
+++ b/cpp/msgpack/object.hpp
@@ -20,6 +20,7 @@
#include "msgpack/object.h"
#include "msgpack/pack.hpp"
+#include "msgpack/zone.hpp"
#include <string.h>
#include <stdexcept>
#include <typeinfo>
@@ -93,6 +94,9 @@ struct object {
object(const T& v);
template <typename T>
+ object(const T& v, zone* z);
+
+ template <typename T>
object& operator=(const T& v);
operator msgpack_object();
@@ -101,6 +105,10 @@ private:
struct implicit_type;
public:
+ // FIXME private?
+ struct object_zone;
+
+public:
implicit_type convert() const;
};
@@ -109,6 +117,14 @@ struct object_kv {
object val;
};
+struct object::object_zone : object {
+ object_zone(msgpack::zone* zone) : zone(zone) { }
+ msgpack::zone* zone;
+private:
+ object_zone();
+};
+
+
bool operator==(const object x, const object y);
bool operator!=(const object x, const object y);
@@ -230,6 +246,15 @@ inline object& object::operator=(const T& v)
return *this;
}
+template <typename T>
+object::object(const T& v, zone* z)
+{
+ object_zone oz(z);
+ oz << v;
+ type = oz.type;
+ via = oz.via;
+}
+
inline object::operator msgpack_object()
{