bool.hpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // MessagePack for C++ static resolution routine
  3. //
  4. // Copyright (C) 2008-2016 FURUHASHI Sadayuki
  5. //
  6. // Distributed under the Boost Software License, Version 1.0.
  7. // (See accompanying file LICENSE_1_0.txt or copy at
  8. // http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. #ifndef MSGPACK_V1_TYPE_BOOL_HPP
  11. #define MSGPACK_V1_TYPE_BOOL_HPP
  12. #include "msgpack/versioning.hpp"
  13. #include "msgpack/adaptor/adaptor_base.hpp"
  14. #include "msgpack/object.hpp"
  15. namespace msgpack {
  16. /// @cond
  17. MSGPACK_API_VERSION_NAMESPACE(v1) {
  18. /// @endcond
  19. namespace adaptor {
  20. template <>
  21. struct convert<bool> {
  22. msgpack::object const& operator()(msgpack::object const& o, bool& v) const {
  23. if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); }
  24. v = o.via.boolean;
  25. return o;
  26. }
  27. };
  28. template <>
  29. struct pack<bool> {
  30. template <typename Stream>
  31. msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const bool& v) const {
  32. if(v) { o.pack_true(); }
  33. else { o.pack_false(); }
  34. return o;
  35. }
  36. };
  37. template <>
  38. struct object<bool> {
  39. void operator()(msgpack::object& o, bool v) const {
  40. o.type = msgpack::type::BOOLEAN;
  41. o.via.boolean = v;
  42. }
  43. };
  44. template <>
  45. struct object_with_zone<bool> {
  46. void operator()(msgpack::object::with_zone& o, bool v) const {
  47. static_cast<msgpack::object&>(o) << v;
  48. }
  49. };
  50. } // namespace adaptor
  51. /// @cond
  52. } // MSGPACK_API_VERSION_NAMESPACE(v1)
  53. /// @endcond
  54. } // namespace msgpack
  55. #endif // MSGPACK_V1_TYPE_BOOL_HPP