Dependents:   hello_message_pack

msgpack-c & msgpack-c++ https://github.com/msgpack/msgpack-c implementation for embedded systems (mbed / Arduino)

Revision:
0:3f9dbf1e2cb0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/msgpack/adaptor/nil.hpp	Sat Feb 13 01:53:11 2016 +0000
@@ -0,0 +1,92 @@
+//
+// MessagePack for C++ static resolution routine
+//
+// Copyright (C) 2008-2009 FURUHASHI Sadayuki
+//
+//    Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//    http://www.boost.org/LICENSE_1_0.txt)
+//
+#ifndef MSGPACK_TYPE_NIL_HPP
+#define MSGPACK_TYPE_NIL_HPP
+
+#include "msgpack/versioning.hpp"
+#include "msgpack/adaptor/adaptor_base.hpp"
+
+namespace msgpack {
+
+/// @cond
+MSGPACK_API_VERSION_NAMESPACE(v1) {
+/// @endcond
+
+namespace type {
+
+struct nil_t { };
+
+#if !defined(MSGPACK_DISABLE_LEGACY_NIL)
+
+typedef nil_t nil;
+
+#endif // !defined(MSGPACK_DISABLE_LEGACY_NIL)
+
+inline bool operator<(nil_t const& lhs, nil_t const& rhs) {
+    return &lhs < &rhs;
+}
+
+inline bool operator==(nil_t const& lhs, nil_t const& rhs) {
+    return &lhs == &rhs;
+}
+
+}  // namespace type
+
+namespace adaptor {
+
+template <>
+struct convert<type::nil_t> {
+    msgpack::object const& operator()(msgpack::object const& o, type::nil_t&) const {
+        if(o.type != msgpack::type::NIL) { 
+//            throw msgpack::type_error();
+        }
+        return o;
+    }
+};
+
+template <>
+struct pack<type::nil_t> {
+    template <typename Stream>
+    msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::nil_t&) const {
+        o.pack_nil();
+        return o;
+    }
+};
+
+template <>
+struct object<type::nil_t> {
+    void operator()(msgpack::object& o, type::nil_t) const {
+        o.type = msgpack::type::NIL;
+    }
+};
+
+template <>
+struct object_with_zone<type::nil_t> {
+    void operator()(msgpack::object::with_zone& o, type::nil_t v) const {
+        static_cast<msgpack::object&>(o) << v;
+    }
+};
+
+} // namespace adaptor
+
+template <>
+inline void msgpack::object::as<void>() const
+{
+    msgpack::type::nil_t v;
+    convert(v);
+}
+
+/// @cond
+}  // MSGPACK_API_VERSION_NAMESPACE(v1)
+/// @endcond
+
+}  // namespace msgpack
+
+#endif // MSGPACK_TYPE_NIL_HPP