10 #ifndef MSGPACK_V1_TYPE_BOOST_FUSION_HPP 11 #define MSGPACK_V1_TYPE_BOOST_FUSION_HPP 18 #if !defined (MSGPACK_USE_CPP03) 20 #endif // #if !defined (MSGPACK_USE_CPP03) 22 #include <boost/fusion/support/is_sequence.hpp> 23 #include <boost/fusion/sequence/intrinsic/size.hpp> 24 #include <boost/fusion/algorithm/iteration/for_each.hpp> 25 #include <boost/fusion/sequence/intrinsic/at.hpp> 26 #include <boost/fusion/include/mpl.hpp> 27 #include <boost/mpl/size.hpp> 37 #if !defined (MSGPACK_USE_CPP03) 43 boost::fusion::traits::is_sequence<T>::value &&
46 boost::mpl::bool_<true>,
50 msgpack::has_as<boost::mpl::_2>
52 boost::mpl::bool_<true>,
53 boost::mpl::bool_<false>
63 using tuple_t = decltype(to_tuple(std::declval<T>(),
gen_seq<boost::mpl::size<T>::value>()));
68 template<std::size_t... Is,
typename U>
70 typename std::remove_reference<
71 typename boost::fusion::result_of::at_c<T, Is>::type
76 template<std::size_t... Is,
typename U>
78 return T(std::get<Is>(u)...);
82 #endif // !defined (MSGPACK_USE_CPP03) 92 boost::fusion::for_each(v, convert_imp(o, index));
97 convert_imp(
msgpack::object const& obj, uint32_t& index):obj_(obj), index_(index) {}
99 void operator()(U& v)
const {
108 template <
typename T>
110 template <
typename Stream>
114 boost::fusion::for_each(v, pack_imp<Stream>(o));
118 template <
typename Stream>
121 template <
typename U>
122 void operator()(U
const& v)
const {
130 template <
typename T>
138 boost::fusion::for_each(v, with_zone_imp(o, count));
141 struct with_zone_imp {
143 template <
typename U>
144 void operator()(U
const& v)
const {
160 #endif // MSGPACK_V1_TYPE_BOOST_FUSION_HPP static T to_t(U const &u, seq< Is... >)
Definition: fusion.hpp:77
uint32_t size
Definition: object_fwd.hpp:23
void * allocate_align(size_t size, size_t align=MSGPACK_ZONE_ALIGN)
Definition: cpp03_zone.hpp:236
uint32_t checked_get_container_size(T size)
Definition: check_container_size.hpp:55
Definition: object_fwd_decl.hpp:60
union_type via
Definition: object_fwd.hpp:92
msgpack::zone & zone
Definition: object.hpp:36
msgpack::object * ptr
Definition: object_fwd.hpp:24
packer< Stream > & pack_array(uint32_t n)
Packing array header and size.
Definition: pack.hpp:1160
Definition: adaptor_base.hpp:15
Definition: object.hpp:34
static std::tuple< typename std::remove_reference< typename boost::fusion::result_of::at_c< T, Is >::type >::type... > to_tuple(U const &u, seq< Is... >)
Definition: fusion.hpp:73
std::enable_if< msgpack::has_as< T >::value, T >::type as() const
Get value as T.
Definition: object.hpp:584
Definition: adaptor_base.hpp:43
tuple make_tuple()
Definition: cpp03_msgpack_tuple.hpp:10375
Definition: object_fwd.hpp:233
msgpack::object const & operator()(msgpack::object const &o, T &v) const
Definition: fusion.hpp:86
Definition: adaptor_base.hpp:32
T operator()(msgpack::object const &o) const
Definition: fusion.hpp:58
msgpack::object_array array
Definition: object_fwd.hpp:84
Definition: cpp_config_decl.hpp:52
Object class that corresponding to MessagePack format object.
Definition: object_fwd.hpp:75
msgpack::type::object_type type
Definition: object_fwd.hpp:91
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:58
Definition: object_fwd_decl.hpp:39
msgpack::packer< Stream > & operator()(msgpack::packer< Stream > &o, const T &v) const
Definition: fusion.hpp:111
The class template that supports continuous packing.
Definition: adaptor_base_decl.hpp:24
void operator()(msgpack::object::with_zone &o, const T &v) const
Definition: fusion.hpp:132
Definition: adaptor_base.hpp:27