Dependents: hello_message_pack
msgpack-c & msgpack-c++ https://github.com/msgpack/msgpack-c implementation for embedded systems (mbed / Arduino)
Diff: include/msgpack/adaptor/nil.hpp
- 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