MessagePack for C++
reference_wrapper.hpp
Go to the documentation of this file.
1 //
2 // MessagePack for C++ static resolution routine
3 //
4 // Copyright (C) 2015 KONDO Takatoshi
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 
11 #ifndef MSGPACK_V1_TYPE_CPP11_REFERENCE_WRAPPER_HPP
12 #define MSGPACK_V1_TYPE_CPP11_REFERENCE_WRAPPER_HPP
13 
14 #include "msgpack/versioning.hpp"
16 #include "msgpack/object.hpp"
18 
19 #include <memory>
20 #include <type_traits>
21 
22 namespace msgpack {
23 
27 
28 namespace adaptor {
29 
30 template <typename T>
31 struct convert<std::reference_wrapper<T>> {
32  msgpack::object const& operator()(msgpack::object const& o, std::reference_wrapper<T>& v) const {
33  msgpack::adaptor::convert<T>()(o, v.get());
34  return o;
35  }
36 };
37 
38 template <typename T>
39 struct pack<std::reference_wrapper<T>> {
40  template <typename Stream>
41  msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::reference_wrapper<T>& v) const {
42  o.pack(v.get());
43  return o;
44  }
45 };
46 
47 template <typename T>
48 struct object<std::reference_wrapper<T> > {
49  void operator()(msgpack::object& o, const std::reference_wrapper<T>& v) const {
51  }
52 };
53 
54 template <typename T>
55 struct object_with_zone<std::reference_wrapper<T>> {
56  void operator()(msgpack::object::with_zone& o, const std::reference_wrapper<T>& v) const {
58  }
59 };
60 
61 } // namespace adaptor
62 
64 } // MSGPACK_API_VERSION_NAMESPACE(v1)
66 
67 } // namespace msgpack
68 
69 #endif // MSGPACK_V1_TYPE_CPP11_REFERENCE_WRAPPER_HPP
The class template that supports continuous packing.
Definition: pack.hpp:33
packer< Stream > & pack(const T &v)
Packing function template.
Definition: adaptor_base.hpp:15
msgpack::object const & operator()(msgpack::object const &o, std::reference_wrapper< T > &v) const
Definition: reference_wrapper.hpp:32
Definition: adaptor_base.hpp:27
void operator()(msgpack::object &o, const std::reference_wrapper< T > &v) const
Definition: reference_wrapper.hpp:49
void operator()(msgpack::object::with_zone &o, const std::reference_wrapper< T > &v) const
Definition: reference_wrapper.hpp:56
Definition: adaptor_base.hpp:43
Definition: adaptor_base.hpp:38
msgpack::packer< Stream > & operator()(msgpack::packer< Stream > &o, const std::reference_wrapper< T > &v) const
Definition: reference_wrapper.hpp:41
Definition: adaptor_base.hpp:32
Definition: object.hpp:35
Object class that corresponding to MessagePack format object.
Definition: object_fwd.hpp:75
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:66