mirror of
https://github.com/msgpack/msgpack-python.git
synced 2026-02-07 02:09:59 +00:00
cpp: MSGPACK_DEFINE defines T::msgpack_object(object*, zone*)
This commit is contained in:
parent
01b6673528
commit
05e28752f1
14 changed files with 90 additions and 15 deletions
|
|
@ -45,6 +45,9 @@ inline void operator<< (object& o, bool v)
|
|||
o.via.boolean = v;
|
||||
}
|
||||
|
||||
inline void operator<< (object::with_zone& o, bool v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
|
||||
} // namespace msgpack
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,10 @@
|
|||
void msgpack_unpack(msgpack::object o) \
|
||||
{ \
|
||||
msgpack::type::make_define(__VA_ARGS__).msgpack_unpack(o); \
|
||||
}\
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone* z) const \
|
||||
{ \
|
||||
msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \
|
||||
}
|
||||
|
||||
namespace msgpack {
|
||||
|
|
@ -51,6 +55,12 @@ struct define<> {
|
|||
{
|
||||
if(o.type != type::ARRAY) { throw type_error(); }
|
||||
}
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone* z) const
|
||||
{
|
||||
o->type = type::ARRAY;
|
||||
o->via.array.ptr = NULL;
|
||||
o->via.array.size = 0;
|
||||
}
|
||||
};
|
||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||
|
|
@ -73,6 +83,14 @@ struct define<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
|||
<%0.upto(i) {|j|%>
|
||||
if(size <= <%=j%>) { return; } o.via.array.ptr[<%=j%>].convert(&a<%=j%>);<%}%>
|
||||
}
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone* z) const
|
||||
{
|
||||
o->type = type::ARRAY;
|
||||
o->via.array.ptr = (object*)z->malloc(sizeof(object)*<%=i+1%>);
|
||||
o->via.array.size = <%=i+1%>;
|
||||
<%0.upto(i) {|j|%>
|
||||
o->via.array.ptr[<%=j%>] = object(a<%=j%>, z);<%}%>
|
||||
}
|
||||
<%0.upto(i) {|j|%>
|
||||
A<%=j%>& a<%=j%>;<%}%>
|
||||
};
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const std::deque<T>& v)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
inline void operator<< (object::object_zone& o, const std::deque<T>& v)
|
||||
inline void operator<< (object::with_zone& o, const std::deque<T>& v)
|
||||
{
|
||||
o.type = type::ARRAY;
|
||||
object* p = (object*)o.zone->malloc(sizeof(object)*v.size());
|
||||
|
|
|
|||
|
|
@ -69,6 +69,12 @@ inline void operator<< (object& o, double v)
|
|||
o.via.dec = v;
|
||||
}
|
||||
|
||||
inline void operator<< (object::with_zone& o, float v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, double v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
|
||||
} // namespace msgpack
|
||||
|
||||
|
|
|
|||
|
|
@ -173,6 +173,38 @@ inline void operator<< (object& o, unsigned long long v)
|
|||
{ o.type = type::POSITIVE_INTEGER, o.via.u64 = v; }
|
||||
|
||||
|
||||
inline void operator<< (object::with_zone& o, signed char v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, signed short v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, signed int v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, signed long v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, signed long long v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
|
||||
inline void operator<< (object::with_zone& o, unsigned char v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, unsigned short v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, unsigned int v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, unsigned long v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
inline void operator<< (object::with_zone& o, unsigned long long v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
|
||||
} // namespace msgpack
|
||||
|
||||
#endif /* msgpack/type/int.hpp */
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const std::list<T>& v)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
inline void operator<< (object::object_zone& o, const std::list<T>& v)
|
||||
inline void operator<< (object::with_zone& o, const std::list<T>& v)
|
||||
{
|
||||
o.type = type::ARRAY;
|
||||
object* p = (object*)o.zone->malloc(sizeof(object)*v.size());
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@ inline void operator<< (object& o, type::nil v)
|
|||
o.type = type::NIL;
|
||||
}
|
||||
|
||||
inline void operator<< (object::with_zone& o, type::nil v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
|
||||
} // namespace msgpack
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const std::pair<T1, T2>& v
|
|||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
inline void operator<< (object::object_zone& o, const std::pair<T1, T2>& v)
|
||||
inline void operator<< (object::with_zone& o, const std::pair<T1, T2>& v)
|
||||
{
|
||||
o.type = type::ARRAY;
|
||||
object* p = (object*)o.zone->malloc(sizeof(object)*2);
|
||||
|
|
|
|||
|
|
@ -84,6 +84,9 @@ inline void operator<< (object& o, const type::raw_ref& v)
|
|||
o.via.raw.size = v.size;
|
||||
}
|
||||
|
||||
inline void operator<< (object::with_zone& o, const type::raw_ref& v)
|
||||
{ static_cast<object&>(o) << v; }
|
||||
|
||||
|
||||
} // namespace msgpack
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const std::set<T>& v)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
inline void operator<< (object::object_zone& o, const std::set<T>& v)
|
||||
inline void operator<< (object::with_zone& o, const std::set<T>& v)
|
||||
{
|
||||
o.type = type::ARRAY;
|
||||
object* p = (object*)o.zone->malloc(sizeof(object)*v.size());
|
||||
|
|
@ -90,7 +90,7 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const std::multiset<T>& v)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
inline void operator<< (object::object_zone& o, const std::multiset<T>& v)
|
||||
inline void operator<< (object::with_zone& o, const std::multiset<T>& v)
|
||||
{
|
||||
o.type = type::ARRAY;
|
||||
object* p = (object*)o.zone->malloc(sizeof(object)*v.size());
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const std::string& v)
|
|||
return o;
|
||||
}
|
||||
|
||||
inline void operator<< (object::object_zone& o, const std::string& v)
|
||||
inline void operator<< (object::with_zone& o, const std::string& v)
|
||||
{
|
||||
o.type = type::RAW;
|
||||
char* ptr = (char*)o.zone->malloc(v.size());
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ const packer<Stream>& operator<< (
|
|||
<%}%>
|
||||
|
||||
inline void operator<< (
|
||||
object::object_zone& o,
|
||||
object::with_zone& o,
|
||||
const type::tuple<>& v) {
|
||||
o.type = type::ARRAY;
|
||||
o.via.array.ptr = NULL;
|
||||
|
|
@ -175,7 +175,7 @@ inline void operator<< (
|
|||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||
inline void operator<< (
|
||||
object::object_zone& o,
|
||||
object::with_zone& o,
|
||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) {
|
||||
o.type = type::ARRAY;
|
||||
o.via.array.ptr = (object*)o.zone->malloc(sizeof(object)*<%=i+1%>);
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const std::vector<T>& v)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
inline void operator<< (object::object_zone& o, const std::vector<T>& v)
|
||||
inline void operator<< (object::with_zone& o, const std::vector<T>& v)
|
||||
{
|
||||
o.type = type::ARRAY;
|
||||
object* p = (object*)o.zone->malloc(sizeof(object)*v.size());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue