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_OBJECT_FWD_HPP
12 #define MSGPACK_OBJECT_FWD_HPP
13 
14 #include "msgpack/versioning.hpp"
15 #include "msgpack/zone.hpp"
16 #include "msgpack/object.h"
17 
18 #include <typeinfo>
19 
20 namespace msgpack {
21 
25 
26 
27 namespace type {
28  enum object_type {
29  NIL = MSGPACK_OBJECT_NIL,
30  BOOLEAN = MSGPACK_OBJECT_BOOLEAN,
31  POSITIVE_INTEGER = MSGPACK_OBJECT_POSITIVE_INTEGER,
32  NEGATIVE_INTEGER = MSGPACK_OBJECT_NEGATIVE_INTEGER,
33  FLOAT = MSGPACK_OBJECT_FLOAT,
34 #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
35  DOUBLE = MSGPACK_OBJECT_DOUBLE, // obsolete
36 #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
37  STR = MSGPACK_OBJECT_STR,
38  BIN = MSGPACK_OBJECT_BIN,
39  ARRAY = MSGPACK_OBJECT_ARRAY,
40  MAP = MSGPACK_OBJECT_MAP,
41  EXT = MSGPACK_OBJECT_EXT
42  };
43 }
44 
45 
46 struct object;
47 struct object_kv;
48 
49 struct object_array {
50  uint32_t size;
52 };
53 
54 struct object_map {
55  uint32_t size;
57 };
58 
59 struct object_str {
60  uint32_t size;
61  const char* ptr;
62 };
63 
64 struct object_bin {
65  uint32_t size;
66  const char* ptr;
67 };
68 
69 struct object_ext {
70  int8_t type() const { return ptr[0]; }
71  const char* data() const { return &ptr[1]; }
72  uint32_t size;
73  const char* ptr;
74 };
75 
76 
77 #if !defined(MSGPACK_USE_CPP03)
78 struct object;
79 
80 namespace adaptor {
81 template <typename T, typename Enabler = void>
82 struct as;
83 } // namespace adaptor
84 
85 template <typename T>
86 struct has_as {
87 private:
88  template <typename U>
89  static auto check(U*) ->
90  typename std::is_same<
91  decltype(msgpack::adaptor::as<U>()(std::declval<msgpack::object>())),
92  T>::type;
93  template <typename>
94  static std::false_type check(...);
95 public:
96  using type = decltype(check<T>(nullptr));
97  static constexpr bool value = type::value;
98 };
99 
100 #endif // !defined(MSGPACK_USE_CPP03)
101 
103 
106 struct object {
107  union union_type {
108  bool boolean;
109  uint64_t u64;
110  int64_t i64;
111 #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
112  double dec; // obsolete
113 #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
114  double f64;
120  };
121 
124 
126 
129  bool is_nil() const { return type == msgpack::type::NIL; }
130 
131 #if defined(MSGPACK_USE_CPP03)
132 
134 
139  template <typename T>
140  T as() const;
141 
142 #else // defined(MSGPACK_USE_CPP03)
143 
145 
150  template <typename T>
151  typename std::enable_if<msgpack::has_as<T>::value, T>::type as() const;
152 
154 
159  template <typename T>
160  typename std::enable_if<!msgpack::has_as<T>::value, T>::type as() const;
161 
162 #endif // defined(MSGPACK_USE_CPP03)
163 
165 
171  template <typename T>
172  T& convert(T& v) const;
173 
174 
175 #if !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
176 
183  template <typename T>
184  T* convert(T* v) const;
185 #endif // !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
186 
188 
194  template <typename T>
195  bool convert_if_not_nil(T& v) const;
196 
198  object();
199 
201  object(const msgpack_object& o);
202 
204 
211  template <typename T>
212  explicit object(const T& v);
213 
215 
223  template <typename T>
224  object(const T& v, msgpack::zone& z);
225 
227 
236  template <typename T>
237  object(const T& v, msgpack::zone* z);
238 
239  template <typename T>
240  object& operator=(const T& v);
241 
242  operator msgpack_object() const;
243 
244  struct with_zone;
245 
246 private:
247  struct implicit_type;
248 
249 public:
250  implicit_type convert() const;
251 };
252 
253 class type_error : public std::bad_cast { };
254 
255 struct object_kv {
258 };
259 
263 private:
264  with_zone();
265 };
266 
268 } // MSGPACK_API_VERSION_NAMESPACE(v1)
270 
271 } // namespace msgpack
272 
273 #endif // MSGPACK_OBJECT_FWD_HPP
Definition: object_fwd.hpp:37
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:58
Definition: object_fwd.hpp:69
const char * data() const
Definition: object_fwd.hpp:71
msgpack::object_kv * ptr
Definition: object_fwd.hpp:56
uint32_t size
Definition: object_fwd.hpp:50
Definition: object_fwd.hpp:30
const char * ptr
Definition: object_fwd.hpp:66
decltype(check< T >(nullptr)) type
Definition: object_fwd.hpp:96
Definition: object_fwd.hpp:82
union_type via
Definition: object_fwd.hpp:123
Definition: object_fwd.hpp:107
Definition: object_fwd.hpp:38
msgpack::zone & zone
Definition: object_fwd.hpp:262
const char * ptr
Definition: object_fwd.hpp:73
msgpack::object * ptr
Definition: object_fwd.hpp:51
msgpack::object val
Definition: object_fwd.hpp:257
uint32_t size
Definition: object_fwd.hpp:65
Definition: adaptor_base.hpp:15
Definition: object.hpp:170
const char * ptr
Definition: object_fwd.hpp:61
Definition: cpp03_zone.hpp:34
Definition: object_fwd.hpp:33
object_type
Definition: object_fwd.hpp:28
bool boolean
Definition: object_fwd.hpp:108
void convert(T &v, msgpack::object const &o)
Definition: object.hpp:631
Definition: object_fwd.hpp:260
bool is_nil() const
Cheking nil.
Definition: object_fwd.hpp:129
Definition: object_fwd.hpp:255
Definition: object_fwd.hpp:29
int64_t i64
Definition: object_fwd.hpp:110
Definition: object_fwd.hpp:32
uint32_t size
Definition: object_fwd.hpp:72
Definition: object_fwd.hpp:49
Definition: object_fwd.hpp:253
double f64
Definition: object_fwd.hpp:114
Definition: object_fwd.hpp:41
msgpack::object_array array
Definition: object_fwd.hpp:115
with_zone(msgpack::zone &z)
Definition: object_fwd.hpp:261
msgpack::object_map map
Definition: object_fwd.hpp:116
msgpack::object_str str
Definition: object_fwd.hpp:117
Object class that corresponding to MessagePack format object.
Definition: object_fwd.hpp:106
msgpack::type::object_type type
Definition: object_fwd.hpp:122
Definition: object_fwd.hpp:39
msgpack::object key
Definition: object_fwd.hpp:256
uint32_t size
Definition: object_fwd.hpp:55
integral_constant< bool, false > false_type
Definition: cpp_config.hpp:80
Definition: object_fwd.hpp:40
uint32_t size
Definition: object_fwd.hpp:60
Definition: object_fwd.hpp:86
int8_t type() const
Definition: object_fwd.hpp:70
Definition: object_fwd.hpp:54
msgpack::object_ext ext
Definition: object_fwd.hpp:119
Definition: object_fwd.hpp:64
Definition: object_fwd.hpp:59
Definition: object_fwd.hpp:31
uint64_t u64
Definition: object_fwd.hpp:109
msgpack::object_bin bin
Definition: object_fwd.hpp:118