mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-15 15:16:51 +02:00
Separated adaptor functions' definitions and declarations.
This commit is contained in:
@@ -19,9 +19,36 @@
|
||||
#define MSGPACK_OBJECT_HPP
|
||||
|
||||
#include "msgpack/versioning.hpp"
|
||||
#include "msgpack/object_forward.hpp"
|
||||
#include "msgpack/object_fwd.hpp"
|
||||
#include "msgpack/pack.hpp"
|
||||
#include "msgpack/zone.hpp"
|
||||
#include "msgpack/adaptor/int_fwd.hpp"
|
||||
#include "msgpack/adaptor/bool_fwd.hpp"
|
||||
#include "msgpack/adaptor/char_ptr_fwd.hpp"
|
||||
#include "msgpack/adaptor/deque_fwd.hpp"
|
||||
#include "msgpack/adaptor/fixint_fwd.hpp"
|
||||
#include "msgpack/adaptor/float_fwd.hpp"
|
||||
#include "msgpack/adaptor/int_fwd.hpp"
|
||||
#include "msgpack/adaptor/list_fwd.hpp"
|
||||
#include "msgpack/adaptor/map_fwd.hpp"
|
||||
#include "msgpack/adaptor/msgpack_tuple_fwd.hpp"
|
||||
#include "msgpack/adaptor/nil_fwd.hpp"
|
||||
#include "msgpack/adaptor/pair_fwd.hpp"
|
||||
#include "msgpack/adaptor/raw_fwd.hpp"
|
||||
#include "msgpack/adaptor/set_fwd.hpp"
|
||||
#include "msgpack/adaptor/string_fwd.hpp"
|
||||
#include "msgpack/adaptor/vector_fwd.hpp"
|
||||
#include "msgpack/adaptor/vector_char_fwd.hpp"
|
||||
#include "msgpack/adaptor/tr1/unordered_map_fwd.hpp"
|
||||
#include "msgpack/adaptor/tr1/unordered_set_fwd.hpp"
|
||||
|
||||
#if !defined(MSGPACK_USE_CPP03)
|
||||
#include "adaptor/cpp11/array_fwd.hpp"
|
||||
#include "adaptor/cpp11/array_char_fwd.hpp"
|
||||
#include "adaptor/cpp11/forward_list_fwd.hpp"
|
||||
#include "adaptor/cpp11/tuple_fwd.hpp"
|
||||
#endif // !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
#include <string.h>
|
||||
#include <stdexcept>
|
||||
#include <typeinfo>
|
||||
@@ -50,6 +77,18 @@ private:
|
||||
object const& obj;
|
||||
};
|
||||
|
||||
inline object const& operator>> (object const& o, object& v)
|
||||
{
|
||||
v = o;
|
||||
return o;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline object const& operator>> (object const& o, T& v)
|
||||
{
|
||||
v.msgpack_unpack(o.convert());
|
||||
return o;
|
||||
}
|
||||
|
||||
// obsolete
|
||||
template <typename Type>
|
||||
@@ -64,38 +103,15 @@ public:
|
||||
template <typename Packer>
|
||||
void msgpack_pack(Packer& o) const
|
||||
{
|
||||
o << static_cast<const msgpack_type&>(*this);
|
||||
msgpack::operator<<(o, static_cast<const msgpack_type&>(*this));
|
||||
}
|
||||
|
||||
void msgpack_unpack(object const& o)
|
||||
{
|
||||
o >> static_cast<msgpack_type&>(*this);
|
||||
msgpack::operator>>(o, static_cast<msgpack_type&>(*this));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
template <typename Stream>
|
||||
template <typename T>
|
||||
inline packer<Stream>& packer<Stream>::pack(const T& v)
|
||||
{
|
||||
*this << v;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline object const& operator>> (object const& o, object& v)
|
||||
{
|
||||
v = o;
|
||||
return o;
|
||||
}
|
||||
|
||||
// convert operator
|
||||
template <typename T>
|
||||
inline object const& operator>> (object const& o, T& v)
|
||||
{
|
||||
v.msgpack_unpack(o.convert());
|
||||
return o;
|
||||
}
|
||||
|
||||
namespace detail {
|
||||
template <typename Stream, typename T>
|
||||
struct packer_serializer {
|
||||
@@ -120,6 +136,13 @@ inline void operator<< (object::with_zone& o, const T& v)
|
||||
v.msgpack_object(static_cast<object*>(&o), o.zone);
|
||||
}
|
||||
|
||||
template <typename Stream>
|
||||
template <typename T>
|
||||
inline packer<Stream>& packer<Stream>::pack(const T& v)
|
||||
{
|
||||
msgpack::operator<<(*this, v);
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline bool operator==(const object& x, const object& y)
|
||||
{
|
||||
@@ -228,7 +251,7 @@ inline object::implicit_type object::convert() const
|
||||
template <typename T>
|
||||
inline void object::convert(T& v) const
|
||||
{
|
||||
*this >> v;
|
||||
msgpack::operator>>(*this, v);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -254,7 +277,7 @@ inline object::object()
|
||||
template <typename T>
|
||||
inline object::object(const T& v)
|
||||
{
|
||||
*this << v;
|
||||
msgpack::operator<<(*this, v);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -268,7 +291,7 @@ template <typename T>
|
||||
object::object(const T& v, zone& z)
|
||||
{
|
||||
with_zone oz(z);
|
||||
oz << v;
|
||||
msgpack::operator<<(oz, v);
|
||||
type = oz.type;
|
||||
via = oz.via;
|
||||
}
|
||||
@@ -277,7 +300,7 @@ template <typename T>
|
||||
object::object(const T& v, zone* z)
|
||||
{
|
||||
with_zone oz(*z);
|
||||
oz << v;
|
||||
msgpack::operator<<(oz, v);
|
||||
type = oz.type;
|
||||
via = oz.via;
|
||||
}
|
||||
@@ -327,7 +350,7 @@ inline void pack_copy(packer<Stream>& o, T v)
|
||||
|
||||
|
||||
template <typename Stream>
|
||||
packer<Stream>& operator<< (packer<Stream>& o, const object& v)
|
||||
inline packer<Stream>& operator<< (packer<Stream>& o, const object& v)
|
||||
{
|
||||
switch(v.type) {
|
||||
case type::NIL:
|
||||
@@ -374,7 +397,7 @@ packer<Stream>& operator<< (packer<Stream>& o, const object& v)
|
||||
for(object* p(v.via.array.ptr),
|
||||
* const pend(v.via.array.ptr + v.via.array.size);
|
||||
p < pend; ++p) {
|
||||
o << *p;
|
||||
msgpack::operator<<(o, *p);
|
||||
}
|
||||
return o;
|
||||
|
||||
@@ -383,8 +406,8 @@ packer<Stream>& operator<< (packer<Stream>& o, const object& v)
|
||||
for(object_kv* p(v.via.map.ptr),
|
||||
* const pend(v.via.map.ptr + v.via.map.size);
|
||||
p < pend; ++p) {
|
||||
o << p->key;
|
||||
o << p->val;
|
||||
msgpack::operator<<(o, p->key);
|
||||
msgpack::operator<<(o, p->val);
|
||||
}
|
||||
return o;
|
||||
|
||||
|
Reference in New Issue
Block a user