bool.hpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. namespace msgpack {
  15. /// @cond
  16. MSGPACK_API_VERSION_NAMESPACE(v1) {
  17. /// @endcond
  18. namespace adaptor {
  19. template <>
  20. struct convert<bool> {
  21. msgpack::object const& operator()(msgpack::object const& o, bool& v) const {
  22. if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); }
  23. v = o.via.boolean;
  24. return o;
  25. }
  26. };
  27. template <>
  28. struct pack<bool> {
  29. template <typename Stream>
  30. msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const bool& v) const {
  31. if(v) { o.pack_true(); }
  32. else { o.pack_false(); }
  33. return o;
  34. }
  35. };
  36. template <>
  37. struct object<bool> {
  38. void operator()(msgpack::object& o, bool v) const {
  39. o.type = msgpack::type::BOOLEAN;
  40. o.via.boolean = v;
  41. }
  42. };
  43. template <>
  44. struct object_with_zone<bool> {
  45. void operator()(msgpack::object::with_zone& o, bool v) const {
  46. static_cast<msgpack::object&>(o) << v;
  47. }
  48. };
  49. } // namespace adaptor
  50. /// @cond
  51. } // MSGPACK_API_VERSION_NAMESPACE(v1)
  52. /// @endcond
  53. } // namespace msgpack
  54. #endif // MSGPACK_V1_TYPE_BOOL_HPP