MessagePack for C++
object_fwd.hpp
Go to the documentation of this file.
1 //
2 // MessagePack for C++ static resolution routine
3 //
4 // Copyright (C) 2008-2014 FURUHASHI Sadayuki and 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_OBJECT_FWD_HPP
12 #define MSGPACK_V1_OBJECT_FWD_HPP
13 
15 
16 namespace msgpack {
17 
21 
22 struct object_array {
23  uint32_t size;
25 };
26 
27 struct object_map {
28  uint32_t size;
30 };
31 
32 struct object_str {
33  uint32_t size;
34  const char* ptr;
35 };
36 
37 struct object_bin {
38  uint32_t size;
39  const char* ptr;
40 };
41 
42 struct object_ext {
43  int8_t type() const { return ptr[0]; }
44  const char* data() const { return &ptr[1]; }
45  uint32_t size;
46  const char* ptr;
47 };
48 
49 
50 #if !defined(MSGPACK_USE_CPP03)
51 
52 template <typename T>
53 struct has_as {
54 private:
55  template <typename U>
56  static auto check(U*) ->
57  // Check v1 specialization
58  typename std::is_same<
59  decltype(adaptor::as<U>()(std::declval<msgpack::object>())),
60  T
61  >::type;
62  template <typename>
63  static std::false_type check(...);
64 public:
65  using type = decltype(check<T>(nullptr));
66  static constexpr bool value = type::value;
67 };
68 
69 #endif // !defined(MSGPACK_USE_CPP03)
70 
72 
75 struct object {
76  union union_type {
77  bool boolean;
78  uint64_t u64;
79  int64_t i64;
80 #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
81  double dec; // obsolete
82 #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
83  double f64;
89  };
90 
93 
95 
98  bool is_nil() const { return type == msgpack::type::NIL; }
99 
100 #if defined(MSGPACK_USE_CPP03)
101 
103 
108  template <typename T>
109  T as() const;
110 
111 #else // defined(MSGPACK_USE_CPP03)
112 
114 
119  template <typename T>
120  typename std::enable_if<msgpack::has_as<T>::value, T>::type as() const;
121 
123 
128  template <typename T>
129  typename std::enable_if<!msgpack::has_as<T>::value, T>::type as() const;
130 
131 #endif // defined(MSGPACK_USE_CPP03)
132 
134 
140  template <typename T>
141  typename msgpack::enable_if<
143  T&
144  >::type
145  convert(T& v) const;
146 
147  template <typename T, std::size_t N>
148  T (&convert(T(&v)[N]) const)[N];
149 
150 
151 #if !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
152 
159  template <typename T>
160  typename msgpack::enable_if<
162  T
163  >::type
164  convert(T v) const;
165 #endif // !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
166 
168 
174  template <typename T>
175  bool convert_if_not_nil(T& v) const;
176 
178  object();
179 
181  object(const msgpack_object& o);
182 
184 
191  template <typename T>
192  explicit object(const T& v);
193 
195 
203  template <typename T>
204  object(const T& v, msgpack::zone& z);
205 
207 
216  template <typename T>
217  object(const T& v, msgpack::zone* z);
218 
219  template <typename T>
220  object& operator=(const T& v);
221 
222  operator msgpack_object() const;
223 
224  struct with_zone;
225 
226 protected:
227  struct implicit_type;
228 
229 public:
230  implicit_type convert() const;
231 };
232 
233 class type_error : public std::bad_cast { };
234 
236  implicit_type(object const& o) : obj(o) { }
238 
239  template <typename T>
240  operator T();
241 
242 private:
243  object const& obj;
244 };
245 
247 } // MSGPACK_API_VERSION_NAMESPACE(v1)
249 
250 } // namespace msgpack
251 
252 #endif // MSGPACK_V1_OBJECT_FWD_HPP
bool is_nil() const
Cheking nil.
Definition: object_fwd.hpp:98
Definition: cpp_config_decl.hpp:67
Definition: object_fwd.hpp:42
msgpack::object_kv * ptr
Definition: object_fwd.hpp:29
uint32_t size
Definition: object_fwd.hpp:23
const char * ptr
Definition: object_fwd.hpp:39
decltype(check< T >(nullptr)) type
Definition: object_fwd.hpp:65
Definition: object_fwd_decl.hpp:60
union_type via
Definition: object_fwd.hpp:92
~implicit_type()
Definition: object_fwd.hpp:237
Definition: object_fwd.hpp:76
const char * ptr
Definition: object_fwd.hpp:46
msgpack::object * ptr
Definition: object_fwd.hpp:24
uint32_t size
Definition: object_fwd.hpp:38
Definition: adaptor_base.hpp:15
Definition: object_fwd.hpp:235
const char * data() const
Definition: object_fwd.hpp:44
const char * ptr
Definition: object_fwd.hpp:34
implicit_type(object const &o)
Definition: object_fwd.hpp:236
Definition: cpp03_zone.hpp:22
object_type
Definition: object_fwd_decl.hpp:28
bool boolean
Definition: object_fwd.hpp:77
void convert(T &v, msgpack::object const &o)
Definition: object.hpp:657
Definition: object.hpp:34
Definition: object.hpp:29
Definition: object_fwd_decl.hpp:29
int64_t i64
Definition: object_fwd.hpp:79
Definition: cpp_config_decl.hpp:77
uint32_t size
Definition: object_fwd.hpp:45
Definition: object_fwd.hpp:22
Definition: object_fwd.hpp:233
int8_t type() const
Definition: object_fwd.hpp:43
double f64
Definition: object_fwd.hpp:83
msgpack::object_array array
Definition: object_fwd.hpp:84
Definition: cpp_config_decl.hpp:52
msgpack::object_map map
Definition: object_fwd.hpp:85
msgpack::object_str str
Definition: object_fwd.hpp:86
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
uint32_t size
Definition: object_fwd.hpp:28
integral_constant< bool, false > false_type
Definition: cpp_config_decl.hpp:58
uint32_t size
Definition: object_fwd.hpp:33
Definition: object_fwd.hpp:53
Definition: object_fwd.hpp:27
msgpack::object_ext ext
Definition: object_fwd.hpp:88
Definition: object_fwd.hpp:37
Definition: object_fwd.hpp:32
uint64_t u64
Definition: object_fwd.hpp:78
msgpack::object_bin bin
Definition: object_fwd.hpp:87