10#ifndef MSGPACK_V1_TYPE_BOOST_MSGPACK_VARIANT_HPP
11#define MSGPACK_V1_TYPE_BOOST_MSGPACK_VARIANT_HPP
31#pragma GCC diagnostic push
32#pragma GCC diagnostic ignored "-Wconversion"
35#include <boost/variant.hpp>
38#pragma GCC diagnostic pop
41#include <boost/operators.hpp>
52template <
typename STR,
typename BIN,
typename EXT>
61#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
68 boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >,
69 boost::recursive_wrapper<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >,
70 boost::recursive_wrapper<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >
72 private boost::totally_ordered<basic_variant<STR, BIN, EXT> > {
73 typedef boost::variant<
80#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
87 boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >,
95#if defined(_MSC_VER) && _MSC_VER < 1700
100 *
static_cast<base*
>(
this) =
static_cast<base const&
>(other);
150#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
151 bool is_boost_string_ref()
const {
171 return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(
this) !=
MSGPACK_NULLPTR;
181 return boost::get<bool>(*
this);
184 return boost::get<int64_t>(*
this);
187 return boost::get<uint64_t>(*
this);
191 return boost::get<double>(*
this);
194 return static_cast<double>(boost::get<int64_t>(*
this));
197 return static_cast<double>(boost::get<uint64_t>(*
this));
202 return boost::get<std::string>(*
this);
204#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
205 boost::string_ref
const& as_boost_string_ref()
const {
206 return boost::get<boost::string_ref>(*
this);
210 return boost::get<std::vector<char> >(*this);
213 return boost::get<raw_ref>(*
this);
216 return boost::get<ext>(*
this);
219 return boost::get<ext_ref>(*
this);
221 std::vector<basic_variant<STR, BIN, EXT> >
const&
as_vector()
const {
222 return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(*this);
231 template <
typename T>
234 static_cast<base&
>(*this) = int64_t(v);
237 static_cast<base&
>(*this) = uint64_t(v);
240 void double_init(
double v) {
242 if (v >= 0 && v <=
double(std::numeric_limits<uint64_t>::max()) && v ==
double(uint64_t(v))) {
243 static_cast<base&
>(*this) = uint64_t(v);
246 else if (v < 0 && v >=
double(std::numeric_limits<int64_t>::min()) && v ==
double(int64_t(v))) {
247 static_cast<base&
>(*this) = int64_t(v);
251 static_cast<base&
>(*this) = v;
255template <
typename STR,
typename BIN,
typename EXT>
262template <
typename STR,
typename BIN,
typename EXT>
271#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
282#if !defined (MSGPACK_USE_CPP03)
284template <
typename STR,
typename BIN,
typename EXT>
285struct as<type::basic_variant<STR, BIN, EXT> > {
292 case type::POSITIVE_INTEGER:
293 return o.
as<uint64_t>();
294 case type::NEGATIVE_INTEGER:
295 return o.
as<int64_t>();
298 return o.
as<
double>();
306 return o.
as<std::vector<type::basic_variant<STR, BIN, EXT> > >();
319template <
typename STR,
typename BIN,
typename EXT>
320struct convert<type::basic_variant<STR, BIN, EXT> > {
323 type::basic_variant<STR, BIN, EXT>& v)
const {
331 case type::POSITIVE_INTEGER:
332 v = o.
as<uint64_t>();
334 case type::NEGATIVE_INTEGER:
351 v = o.
as<std::vector<type::basic_variant<STR, BIN, EXT> > >();
354 v = o.
as<std::multimap<type::basic_variant<STR, BIN, EXT>, type::basic_variant<STR, BIN, EXT> > >();
365template <
typename Stream>
367 template <
typename T>
377template <
typename STR,
typename BIN,
typename EXT>
378struct pack<type::basic_variant<STR, BIN, EXT> > {
379 template <
typename Stream>
404 template <
typename T>
414template <
typename STR,
typename BIN,
typename EXT>
415struct object<type::basic_variant<STR, BIN, EXT> > {
424 template <
typename T>
434template <
typename STR,
typename BIN,
typename EXT>
The class template that supports continuous packing.
Definition pack.hpp:33
Definition object_fwd.hpp:231
basic_variant< std::string, std::vector< char >, ext > variant
Definition msgpack_variant.hpp:269
bool operator<(basic_variant< STR, BIN, EXT > const &lhs, basic_variant< STR, BIN, EXT > const &rhs)
Definition msgpack_variant.hpp:256
basic_variant< std::string, raw_ref, ext_ref > variant_ref
Definition msgpack_variant.hpp:276
bool operator==(basic_variant< STR, BIN, EXT > const &lhs, basic_variant< STR, BIN, EXT > const &rhs)
Definition msgpack_variant.hpp:263
Definition adaptor_base.hpp:15
msgpack::object const & operator()(msgpack::object const &o, T &v) const
Definition object.hpp:646
Definition msgpack_variant.hpp:388
void operator()(uint64_t const &v) const
Definition msgpack_variant.hpp:395
void operator()(bool const &v) const
Definition msgpack_variant.hpp:392
object_imp(msgpack::object &o)
Definition msgpack_variant.hpp:408
void operator()(int64_t const &v) const
Definition msgpack_variant.hpp:398
msgpack::object & o_
Definition msgpack_variant.hpp:409
void operator()(T const &) const
Definition msgpack_variant.hpp:405
void operator()(double const &v) const
Definition msgpack_variant.hpp:401
void operator()(msgpack::type::nil_t const &v) const
Definition msgpack_variant.hpp:389
Definition msgpack_variant.hpp:423
msgpack::object::with_zone & o_
Definition msgpack_variant.hpp:429
object_with_zone_imp(msgpack::object::with_zone &o)
Definition msgpack_variant.hpp:428
void operator()(T const &v) const
Definition msgpack_variant.hpp:425
Definition msgpack_variant.hpp:366
pack_imp(packer< Stream > &o)
Definition msgpack_variant.hpp:371
packer< Stream > & o_
Definition msgpack_variant.hpp:372
void operator()(T const &value) const
Definition msgpack_variant.hpp:368
Definition adaptor_base.hpp:43
void operator()(msgpack::object::with_zone &o, T const &v) const
Definition object.hpp:662
Definition adaptor_base.hpp:38
void operator()(msgpack::object &o, T const &v) const
Definition adaptor_base.hpp:32
msgpack::packer< Stream > & operator()(msgpack::packer< Stream > &o, T const &v) const
Definition object.hpp:655
Object class that corresponding to MessagePack format object.
Definition object_fwd.hpp:75
std::enable_if< msgpack::has_as< T >::value, T >::type as() const
Get value as T.
Definition object.hpp:1126
msgpack::type::object_type type
Definition object_fwd.hpp:92
Definition msgpack_variant.hpp:72
bool is_map() const
Definition msgpack_variant.hpp:173
boost::variant< nil_t, bool, int64_t, uint64_t, double, std::string, std::vector< char >, msgpack::type::raw_ref, msgpack::type::ext, msgpack::type::ext_ref, boost::recursive_wrapper< std::vector< basic_variant< STR, BIN, EXT > > >, boost::recursive_wrapper< std::map< basic_variant< STR, BIN, EXT >, basic_variant< STR, BIN, EXT > > >, boost::recursive_wrapper< std::multimap< basic_variant< STR, BIN, EXT >, basic_variant< STR, BIN, EXT > > > > base
Definition msgpack_variant.hpp:90
bool is_raw_ref() const
Definition msgpack_variant.hpp:161
double as_double() const
Definition msgpack_variant.hpp:189
ext const & as_ext() const
Definition msgpack_variant.hpp:215
std::vector< basic_variant< STR, BIN, EXT > > const & as_vector() const
Definition msgpack_variant.hpp:221
bool is_ext_ref() const
Definition msgpack_variant.hpp:167
bool is_string() const
Definition msgpack_variant.hpp:147
bool is_int64_t() const
Definition msgpack_variant.hpp:138
bool is_vector_char()
Definition msgpack_variant.hpp:158
bool is_vector() const
Definition msgpack_variant.hpp:170
bool as_bool() const
Definition msgpack_variant.hpp:180
std::multimap< basic_variant< STR, BIN, EXT >, basic_variant< STR, BIN, EXT > > const & as_multimap() const
Definition msgpack_variant.hpp:227
bool is_vector_char() const
Definition msgpack_variant.hpp:155
basic_variant(unsigned char v)
Definition msgpack_variant.hpp:112
basic_variant(signed int v)
Definition msgpack_variant.hpp:113
int64_t as_int64_t() const
Definition msgpack_variant.hpp:183
basic_variant(unsigned long long v)
Definition msgpack_variant.hpp:124
ext_ref const & as_ext_ref() const
Definition msgpack_variant.hpp:218
std::string const & as_string() const
Definition msgpack_variant.hpp:201
uint64_t as_uint64_t() const
Definition msgpack_variant.hpp:186
bool is_ext() const
Definition msgpack_variant.hpp:164
basic_variant(float v)
Definition msgpack_variant.hpp:125
basic_variant(signed long long v)
Definition msgpack_variant.hpp:121
bool is_uint64_t() const
Definition msgpack_variant.hpp:141
bool is_nil() const
Definition msgpack_variant.hpp:132
std::map< basic_variant< STR, BIN, EXT >, basic_variant< STR, BIN, EXT > > const & as_map() const
Definition msgpack_variant.hpp:224
basic_variant(unsigned long v)
Definition msgpack_variant.hpp:120
bool is_double() const
Definition msgpack_variant.hpp:144
basic_variant(signed long v)
Definition msgpack_variant.hpp:117
bool is_multimap() const
Definition msgpack_variant.hpp:176
basic_variant(T const &t)
Definition msgpack_variant.hpp:93
basic_variant(char const *p)
Definition msgpack_variant.hpp:105
raw_ref const & as_raw_ref() const
Definition msgpack_variant.hpp:212
basic_variant(unsigned int v)
Definition msgpack_variant.hpp:116
bool is_bool() const
Definition msgpack_variant.hpp:135
basic_variant(char v)
Definition msgpack_variant.hpp:106
basic_variant(signed char v)
Definition msgpack_variant.hpp:109
basic_variant(double v)
Definition msgpack_variant.hpp:128
basic_variant()
Definition msgpack_variant.hpp:91
std::vector< char > const & as_vector_char() const
Definition msgpack_variant.hpp:209
#define MSGPACK_NULLPTR
Definition cpp_config_decl.hpp:85
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition versioning.hpp:66