summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-04-25 01:24:24 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-04-25 01:24:24 +0900
commit01b6673528127538457fdf445531f3574dc0c20a (patch)
treec264c52c2d3f554e60767f78f161c2bf6d5a9b5d /cpp
parent4e85ebbf9863201107a8f5c68fdabc92749e04fc (diff)
downloadmsgpack-python-01b6673528127538457fdf445531f3574dc0c20a.tar.gz
cpp: bool operator==(object& x, const T& y)
Diffstat (limited to 'cpp')
-rw-r--r--cpp/msgpack/object.hpp11
-rw-r--r--cpp/msgpack/type/string.hpp7
-rw-r--r--cpp/object.cpp3
3 files changed, 21 insertions, 0 deletions
diff --git a/cpp/msgpack/object.hpp b/cpp/msgpack/object.hpp
index a094c56..df1079b 100644
--- a/cpp/msgpack/object.hpp
+++ b/cpp/msgpack/object.hpp
@@ -128,6 +128,9 @@ private:
bool operator==(const object x, const object y);
bool operator!=(const object x, const object y);
+template <typename T>
+bool operator==(const object x, const T& y);
+
std::ostream& operator<< (std::ostream& s, const object o);
@@ -207,6 +210,14 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const T& v)
inline bool operator!=(const object x, const object y)
{ return !(x == y); }
+template <typename T>
+inline bool operator==(const object x, const T& y)
+try {
+ return x == object(y);
+} catch (msgpack::type_error&) {
+ return false;
+}
+
inline object::implicit_type object::convert() const
{
diff --git a/cpp/msgpack/type/string.hpp b/cpp/msgpack/type/string.hpp
index 796603f..8ca2724 100644
--- a/cpp/msgpack/type/string.hpp
+++ b/cpp/msgpack/type/string.hpp
@@ -48,6 +48,13 @@ inline void operator<< (object::object_zone& o, const std::string& v)
memcpy(ptr, v.data(), v.size());
}
+inline void operator<< (object& o, const std::string& v)
+{
+ o.type = type::RAW;
+ o.via.raw.ptr = v.data();
+ o.via.raw.size = v.size();
+}
+
} // namespace msgpack
diff --git a/cpp/object.cpp b/cpp/object.cpp
index a7adb71..626d186 100644
--- a/cpp/object.cpp
+++ b/cpp/object.cpp
@@ -103,6 +103,9 @@ 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::RAW:
return x.via.raw.size == y.via.raw.size &&
memcmp(x.via.raw.ptr, y.via.raw.ptr, x.via.raw.size) == 0;