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  T& convert(T& v) const;
142 
143 
144 #if !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
145 
152  template <typename T>
153  T* convert(T* v) const;
154 #endif // !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
155 
157 
163  template <typename T>
164  bool convert_if_not_nil(T& v) const;
165 
167  object();
168 
170  object(const msgpack_object& o);
171 
173 
180  template <typename T>
181  explicit object(const T& v);
182 
184 
192  template <typename T>
193  object(const T& v, msgpack::zone& z);
194 
196 
205  template <typename T>
206  object(const T& v, msgpack::zone* z);
207 
208  template <typename T>
209  object& operator=(const T& v);
210 
211  operator msgpack_object() const;
212 
213  struct with_zone;
214 
215 protected:
216  struct implicit_type;
217 
218 public:
219  implicit_type convert() const;
220 };
221 
222 class type_error : public std::bad_cast { };
223 
225  implicit_type(object const& o) : obj(o) { }
227 
228  template <typename T>
229  operator T();
230 
231 private:
232  object const& obj;
233 };
234 
236 } // MSGPACK_API_VERSION_NAMESPACE(v1)
238 
239 } // namespace msgpack
240 
241 #endif // MSGPACK_V1_OBJECT_FWD_HPP
bool is_nil() const
Cheking nil.
Definition: object_fwd.hpp:98
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:226
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:224
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:225
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:640
Definition: object.hpp:34
Definition: object.hpp:29
Definition: object_fwd_decl.hpp:29
int64_t i64
Definition: object_fwd.hpp:79
uint32_t size
Definition: object_fwd.hpp:45
Definition: object_fwd.hpp:22
Definition: object_fwd.hpp:222
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
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