From f969f6f39ced8117ce35bba4cdaf9ab7f000a0d1 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Mon, 11 Aug 2014 13:23:27 +0900 Subject: [PATCH] Replaced zone* member variable in object with zone&. Added msgpack::object::with_zone tests. Added tuples operator<<'s parameter to const. Fixed array object::with_zone pointer and size unset problem. Fixed forward_list object::with_zone pointer and size unset problem. --- erb/cpp03_define.hpp.erb | 8 +- erb/cpp03_msgpack_tuple.hpp.erb | 2 +- include/msgpack/adaptor/cpp11/array.hpp | 4 +- include/msgpack/adaptor/cpp11/array_char.hpp | 2 +- .../msgpack/adaptor/cpp11/forward_list.hpp | 5 +- include/msgpack/adaptor/cpp11/tuple.hpp | 4 +- include/msgpack/adaptor/deque.hpp | 2 +- .../msgpack/adaptor/detail/cpp03_define.hpp | 132 ++-- .../adaptor/detail/cpp03_msgpack_tuple.hpp | 64 +- .../msgpack/adaptor/detail/cpp11_define.hpp | 12 +- .../adaptor/detail/cpp11_msgpack_tuple.hpp | 4 +- include/msgpack/adaptor/list.hpp | 2 +- include/msgpack/adaptor/map.hpp | 6 +- include/msgpack/adaptor/pair.hpp | 2 +- include/msgpack/adaptor/set.hpp | 4 +- include/msgpack/adaptor/string.hpp | 2 +- include/msgpack/adaptor/tr1/unordered_map.hpp | 4 +- include/msgpack/adaptor/tr1/unordered_set.hpp | 4 +- include/msgpack/adaptor/vector.hpp | 2 +- include/msgpack/adaptor/vector_char.hpp | 2 +- include/msgpack/object.hpp | 19 +- test/CMakeLists.txt | 1 + test/Makefile.am | 3 + test/buffer.cc | 119 ---- test/cases.cc | 38 - test/convert.cc | 76 -- test/fixint.cc | 55 -- test/fixint_c.cc | 32 - test/msgpack_tuple.cc | 103 --- test/object.cc | 125 ---- test/object_with_zone.cpp | 662 ++++++++++++++++++ test/pack_unpack.cc | 132 ---- test/pack_unpack_c.cc | 70 -- test/reference.cc | 434 ------------ test/streaming.cc | 316 --------- test/streaming_c.cc | 114 --- test/version.cc | 13 - test/zone.cc | 78 --- 38 files changed, 818 insertions(+), 1839 deletions(-) delete mode 100644 test/buffer.cc delete mode 100644 test/cases.cc delete mode 100644 test/convert.cc delete mode 100644 test/fixint.cc delete mode 100644 test/fixint_c.cc delete mode 100644 test/msgpack_tuple.cc delete mode 100644 test/object.cc create mode 100644 test/object_with_zone.cpp delete mode 100644 test/pack_unpack.cc delete mode 100644 test/pack_unpack_c.cc delete mode 100644 test/reference.cc delete mode 100644 test/streaming.cc delete mode 100644 test/streaming_c.cc delete mode 100644 test/version.cc delete mode 100644 test/zone.cc diff --git a/erb/cpp03_define.hpp.erb b/erb/cpp03_define.hpp.erb index fa27ecd6..10ef4502 100644 --- a/erb/cpp03_define.hpp.erb +++ b/erb/cpp03_define.hpp.erb @@ -29,7 +29,7 @@ msgpack::type::make_define(__VA_ARGS__).msgpack_unpack(o); \ }\ template \ - void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone* z) const \ + void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ { \ msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \ } @@ -82,7 +82,7 @@ struct define<> { { if(o.type != type::ARRAY) { throw type_error(); } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; o->via.array.ptr = nullptr; @@ -115,10 +115,10 @@ struct define, A<%=j%><%}%>> { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*<%=i+1%>)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*<%=i+1%>)); o->via.array.size = <%=i+1%>; <%0.upto(i) {|j|%> o->via.array.ptr[<%=j%>] = object(a<%=j%>, z);<%}%> diff --git a/erb/cpp03_msgpack_tuple.hpp.erb b/erb/cpp03_msgpack_tuple.hpp.erb index c0c73c61..5fa95fcc 100644 --- a/erb/cpp03_msgpack_tuple.hpp.erb +++ b/erb/cpp03_msgpack_tuple.hpp.erb @@ -184,7 +184,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple, A<%=j%><%}%>>& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*<%=i+1%>)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*<%=i+1%>)); o.via.array.size = <%=i+1%>; <%0.upto(i) {|j|%> o.via.array.ptr[<%=j%>] = object(v.template get<<%=j%>>(), o.zone);<%}%> diff --git a/include/msgpack/adaptor/cpp11/array.hpp b/include/msgpack/adaptor/cpp11/array.hpp index 1e2f6bbb..be89559b 100644 --- a/include/msgpack/adaptor/cpp11/array.hpp +++ b/include/msgpack/adaptor/cpp11/array.hpp @@ -57,7 +57,9 @@ inline void operator<< (object::with_zone& o, const std::array& v) { o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); + o.via.array.size = v.size(); + o.via.array.ptr = p; for (auto const& e : v) *p++ = object(e, o.zone); } } diff --git a/include/msgpack/adaptor/cpp11/array_char.hpp b/include/msgpack/adaptor/cpp11/array_char.hpp index e909f7e1..71f1e87d 100644 --- a/include/msgpack/adaptor/cpp11/array_char.hpp +++ b/include/msgpack/adaptor/cpp11/array_char.hpp @@ -63,7 +63,7 @@ template inline void operator<< (object::with_zone& o, const std::array& v) { o.type = type::BIN; - char* ptr = static_cast(o.zone->allocate_align(v.size())); + char* ptr = static_cast(o.zone.allocate_align(v.size())); o.via.bin.ptr = ptr; o.via.bin.size = static_cast(v.size()); std::memcpy(ptr, v.data(), v.size()); diff --git a/include/msgpack/adaptor/cpp11/forward_list.hpp b/include/msgpack/adaptor/cpp11/forward_list.hpp index fe160d7d..272a7ef3 100644 --- a/include/msgpack/adaptor/cpp11/forward_list.hpp +++ b/include/msgpack/adaptor/cpp11/forward_list.hpp @@ -55,8 +55,11 @@ inline void operator<< (object::with_zone& o, const std::forward_list& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { + std::size_t size = std::distance(v.begin(), v.end()); + o.via.array.size = size; object* p = static_cast( - o.zone->allocate_align(sizeof(object)*std::distance(v.begin(), v.end()))); + o.zone.allocate_align(sizeof(object)*size)); + o.via.array.ptr = p; for(auto const& e : v) *p++ = object(e, o.zone); } } diff --git a/include/msgpack/adaptor/cpp11/tuple.hpp b/include/msgpack/adaptor/cpp11/tuple.hpp index 6c9d0694..79298d6e 100644 --- a/include/msgpack/adaptor/cpp11/tuple.hpp +++ b/include/msgpack/adaptor/cpp11/tuple.hpp @@ -108,9 +108,9 @@ struct StdTupleToObjectWithZone { template inline void operator<< ( object::with_zone& o, - std::tuple& v) { + std::tuple const& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*sizeof...(Args))); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*sizeof...(Args))); o.via.array.size = sizeof...(Args); StdTupleToObjectWithZone::convert(o, v); } diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index 089c04f2..c6571343 100644 --- a/include/msgpack/adaptor/deque.hpp +++ b/include/msgpack/adaptor/deque.hpp @@ -57,7 +57,7 @@ inline void operator<< (object::with_zone& o, const std::deque& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/include/msgpack/adaptor/detail/cpp03_define.hpp b/include/msgpack/adaptor/detail/cpp03_define.hpp index 7089c7f7..30090d3e 100644 --- a/include/msgpack/adaptor/detail/cpp03_define.hpp +++ b/include/msgpack/adaptor/detail/cpp03_define.hpp @@ -29,7 +29,7 @@ msgpack::type::make_define(__VA_ARGS__).msgpack_unpack(o); \ }\ template \ - void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone* z) const \ + void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ { \ msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \ } @@ -82,7 +82,7 @@ struct define<> { { if(o.type != type::ARRAY) { throw type_error(); } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; o->via.array.ptr = nullptr; @@ -115,10 +115,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*1)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*1)); o->via.array.size = 1; o->via.array.ptr[0] = object(a0, z); @@ -154,10 +154,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*2)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*2)); o->via.array.size = 2; o->via.array.ptr[0] = object(a0, z); @@ -197,10 +197,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*3)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*3)); o->via.array.size = 3; o->via.array.ptr[0] = object(a0, z); @@ -244,10 +244,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*4)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*4)); o->via.array.size = 4; o->via.array.ptr[0] = object(a0, z); @@ -295,10 +295,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*5)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*5)); o->via.array.size = 5; o->via.array.ptr[0] = object(a0, z); @@ -350,10 +350,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*6)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*6)); o->via.array.size = 6; o->via.array.ptr[0] = object(a0, z); @@ -409,10 +409,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*7)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*7)); o->via.array.size = 7; o->via.array.ptr[0] = object(a0, z); @@ -472,10 +472,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*8)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*8)); o->via.array.size = 8; o->via.array.ptr[0] = object(a0, z); @@ -539,10 +539,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*9)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*9)); o->via.array.size = 9; o->via.array.ptr[0] = object(a0, z); @@ -610,10 +610,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*10)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*10)); o->via.array.size = 10; o->via.array.ptr[0] = object(a0, z); @@ -685,10 +685,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*11)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*11)); o->via.array.size = 11; o->via.array.ptr[0] = object(a0, z); @@ -764,10 +764,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*12)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*12)); o->via.array.size = 12; o->via.array.ptr[0] = object(a0, z); @@ -847,10 +847,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*13)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*13)); o->via.array.size = 13; o->via.array.ptr[0] = object(a0, z); @@ -934,10 +934,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*14)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*14)); o->via.array.size = 14; o->via.array.ptr[0] = object(a0, z); @@ -1025,10 +1025,10 @@ struct define { } } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*15)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*15)); o->via.array.size = 15; o->via.array.ptr[0] = object(a0, z); @@ -1120,10 +1120,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*16)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*16)); o->via.array.size = 16; o->via.array.ptr[0] = object(a0, z); @@ -1219,10 +1219,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*17)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*17)); o->via.array.size = 17; o->via.array.ptr[0] = object(a0, z); @@ -1322,10 +1322,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*18)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*18)); o->via.array.size = 18; o->via.array.ptr[0] = object(a0, z); @@ -1429,10 +1429,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*19)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*19)); o->via.array.size = 19; o->via.array.ptr[0] = object(a0, z); @@ -1540,10 +1540,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*20)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*20)); o->via.array.size = 20; o->via.array.ptr[0] = object(a0, z); @@ -1655,10 +1655,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*21)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*21)); o->via.array.size = 21; o->via.array.ptr[0] = object(a0, z); @@ -1774,10 +1774,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*22)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*22)); o->via.array.size = 22; o->via.array.ptr[0] = object(a0, z); @@ -1897,10 +1897,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*23)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*23)); o->via.array.size = 23; o->via.array.ptr[0] = object(a0, z); @@ -2024,10 +2024,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*24)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*24)); o->via.array.size = 24; o->via.array.ptr[0] = object(a0, z); @@ -2155,10 +2155,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*25)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*25)); o->via.array.size = 25; o->via.array.ptr[0] = object(a0, z); @@ -2290,10 +2290,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*26)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*26)); o->via.array.size = 26; o->via.array.ptr[0] = object(a0, z); @@ -2429,10 +2429,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*27)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*27)); o->via.array.size = 27; o->via.array.ptr[0] = object(a0, z); @@ -2572,10 +2572,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*28)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*28)); o->via.array.size = 28; o->via.array.ptr[0] = object(a0, z); @@ -2719,10 +2719,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*29)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*29)); o->via.array.size = 29; o->via.array.ptr[0] = object(a0, z); @@ -2870,10 +2870,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*30)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*30)); o->via.array.size = 30; o->via.array.ptr[0] = object(a0, z); @@ -3025,10 +3025,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*31)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*31)); o->via.array.size = 31; o->via.array.ptr[0] = object(a0, z); @@ -3184,10 +3184,10 @@ struct definetype = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*32)); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*32)); o->via.array.size = 32; o->via.array.ptr[0] = object(a0, z); diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp index a6685c46..e3c45006 100644 --- a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp @@ -12274,7 +12274,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*1)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*1)); o.via.array.size = 1; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12285,7 +12285,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*2)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*2)); o.via.array.size = 2; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12297,7 +12297,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*3)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*3)); o.via.array.size = 3; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12310,7 +12310,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*4)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*4)); o.via.array.size = 4; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12324,7 +12324,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*5)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*5)); o.via.array.size = 5; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12339,7 +12339,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*6)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*6)); o.via.array.size = 6; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12355,7 +12355,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*7)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*7)); o.via.array.size = 7; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12372,7 +12372,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*8)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*8)); o.via.array.size = 8; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12390,7 +12390,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*9)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*9)); o.via.array.size = 9; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12409,7 +12409,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*10)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*10)); o.via.array.size = 10; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12429,7 +12429,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*11)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*11)); o.via.array.size = 11; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12450,7 +12450,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*12)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*12)); o.via.array.size = 12; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12472,7 +12472,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*13)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*13)); o.via.array.size = 13; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12495,7 +12495,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*14)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*14)); o.via.array.size = 14; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12519,7 +12519,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*15)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*15)); o.via.array.size = 15; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12544,7 +12544,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*16)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*16)); o.via.array.size = 16; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12570,7 +12570,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*17)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*17)); o.via.array.size = 17; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12597,7 +12597,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*18)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*18)); o.via.array.size = 18; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12625,7 +12625,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*19)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*19)); o.via.array.size = 19; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12654,7 +12654,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*20)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*20)); o.via.array.size = 20; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12684,7 +12684,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*21)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*21)); o.via.array.size = 21; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12715,7 +12715,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*22)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*22)); o.via.array.size = 22; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12747,7 +12747,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*23)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*23)); o.via.array.size = 23; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12780,7 +12780,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*24)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*24)); o.via.array.size = 24; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12814,7 +12814,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*25)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*25)); o.via.array.size = 25; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12849,7 +12849,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*26)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*26)); o.via.array.size = 26; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12885,7 +12885,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*27)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*27)); o.via.array.size = 27; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12922,7 +12922,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*28)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*28)); o.via.array.size = 28; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12960,7 +12960,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*29)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*29)); o.via.array.size = 29; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -12999,7 +12999,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*30)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*30)); o.via.array.size = 30; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -13039,7 +13039,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*31)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*31)); o.via.array.size = 31; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); @@ -13080,7 +13080,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*32)); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*32)); o.via.array.size = 32; o.via.array.ptr[0] = object(v.template get<0>(), o.zone); diff --git a/include/msgpack/adaptor/detail/cpp11_define.hpp b/include/msgpack/adaptor/detail/cpp11_define.hpp index 9addb54a..712b08cf 100644 --- a/include/msgpack/adaptor/detail/cpp11_define.hpp +++ b/include/msgpack/adaptor/detail/cpp11_define.hpp @@ -31,7 +31,7 @@ msgpack::type::make_define(__VA_ARGS__).msgpack_unpack(o); \ }\ template \ - void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone* z) const \ + void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ { \ msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \ } @@ -79,7 +79,7 @@ struct define_imp { if(size <= N-1) { return; } o.via.array.ptr[N-1].convert(std::get(t)); } - static void object(msgpack::object* o, msgpack::zone* z, Tuple const& t) { + static void object(msgpack::object* o, msgpack::zone& z, Tuple const& t) { define_imp::object(o, z, t); o->via.array.ptr[N-1] = msgpack::object(std::get(t), z); } @@ -96,7 +96,7 @@ struct define_imp { if(size <= 0) { return; } o.via.array.ptr[0].convert(std::get<0>(t)); } - static void object(msgpack::object* o, msgpack::zone* z, Tuple const& t) { + static void object(msgpack::object* o, msgpack::zone& z, Tuple const& t) { o->via.array.ptr[0] = msgpack::object(std::get<0>(t), z); } }; @@ -120,10 +120,10 @@ struct define { define_imp, sizeof...(Args)>::unpack(o, a); } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*sizeof...(Args))); + o->via.array.ptr = static_cast(z.allocate_align(sizeof(object)*sizeof...(Args))); o->via.array.size = sizeof...(Args); define_imp, sizeof...(Args)>::object(o, z, a); @@ -145,7 +145,7 @@ struct define<> { { if(o.type != type::ARRAY) { throw type_error(); } } - void msgpack_object(msgpack::object* o, msgpack::zone* z) const + void msgpack_object(msgpack::object* o, msgpack::zone& z) const { o->type = type::ARRAY; o->via.array.ptr = NULL; diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index d3ae6cab..7335e12e 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -172,9 +172,9 @@ struct MsgpackTupleToObjectWithZone { template inline void operator<< ( object::with_zone& o, - type::tuple& v) { + type::tuple const& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*sizeof...(Args))); + o.via.array.ptr = static_cast(o.zone.allocate_align(sizeof(object)*sizeof...(Args))); o.via.array.size = sizeof...(Args); MsgpackTupleToObjectWithZone::convert(o, v); } diff --git a/include/msgpack/adaptor/list.hpp b/include/msgpack/adaptor/list.hpp index 7f5f7085..04633a9d 100644 --- a/include/msgpack/adaptor/list.hpp +++ b/include/msgpack/adaptor/list.hpp @@ -57,7 +57,7 @@ inline void operator<< (object::with_zone& o, const std::list& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/include/msgpack/adaptor/map.hpp b/include/msgpack/adaptor/map.hpp index 464af7e4..ed2fb059 100644 --- a/include/msgpack/adaptor/map.hpp +++ b/include/msgpack/adaptor/map.hpp @@ -78,7 +78,7 @@ inline void operator<< (object::with_zone& o, const type::assoc_vector& v) o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone.allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); @@ -134,7 +134,7 @@ inline void operator<< (object::with_zone& o, const std::map& v) o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone.allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); @@ -184,7 +184,7 @@ inline void operator<< (object::with_zone& o, const std::multimap& v) o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone.allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); diff --git a/include/msgpack/adaptor/pair.hpp b/include/msgpack/adaptor/pair.hpp index 850e17f8..a309cac7 100644 --- a/include/msgpack/adaptor/pair.hpp +++ b/include/msgpack/adaptor/pair.hpp @@ -47,7 +47,7 @@ template inline void operator<< (object::with_zone& o, const std::pair& v) { o.type = type::ARRAY; - object* p = static_cast(o.zone->allocate_align(sizeof(object)*2)); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*2)); o.via.array.ptr = p; o.via.array.size = 2; p[0] = object(v.first, o.zone); diff --git a/include/msgpack/adaptor/set.hpp b/include/msgpack/adaptor/set.hpp index 098949d9..bea26203 100644 --- a/include/msgpack/adaptor/set.hpp +++ b/include/msgpack/adaptor/set.hpp @@ -56,7 +56,7 @@ inline void operator<< (object::with_zone& o, const std::set& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); @@ -102,7 +102,7 @@ inline void operator<< (object::with_zone& o, const std::multiset& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/include/msgpack/adaptor/string.hpp b/include/msgpack/adaptor/string.hpp index 38b7660a..19964a54 100644 --- a/include/msgpack/adaptor/string.hpp +++ b/include/msgpack/adaptor/string.hpp @@ -51,7 +51,7 @@ inline packer& operator<< (packer& o, const std::string& v) inline void operator<< (object::with_zone& o, const std::string& v) { o.type = type::STR; - char* ptr = static_cast(o.zone->allocate_align(v.size())); + char* ptr = static_cast(o.zone.allocate_align(v.size())); o.via.str.ptr = ptr; o.via.str.size = static_cast(v.size()); memcpy(ptr, v.data(), v.size()); diff --git a/include/msgpack/adaptor/tr1/unordered_map.hpp b/include/msgpack/adaptor/tr1/unordered_map.hpp index b18af70f..ebd0d67a 100644 --- a/include/msgpack/adaptor/tr1/unordered_map.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map.hpp @@ -77,7 +77,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone.allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); @@ -127,7 +127,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone.allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); diff --git a/include/msgpack/adaptor/tr1/unordered_set.hpp b/include/msgpack/adaptor/tr1/unordered_set.hpp index 13ae5e51..bf7fc7c8 100644 --- a/include/msgpack/adaptor/tr1/unordered_set.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set.hpp @@ -74,7 +74,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_s o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); @@ -120,7 +120,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index f33920fb..0123a3b6 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -61,7 +61,7 @@ inline void operator<< (object::with_zone& o, const std::vector& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); + object* p = static_cast(o.zone.allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index 642e97c6..9ada3e6c 100644 --- a/include/msgpack/adaptor/vector_char.hpp +++ b/include/msgpack/adaptor/vector_char.hpp @@ -60,7 +60,7 @@ inline void operator<< (object& o, const std::vector& v) inline void operator<< (object::with_zone& o, const std::vector& v) { o.type = type::BIN; - char* ptr = static_cast(o.zone->allocate_align(v.size())); + char* ptr = static_cast(o.zone.allocate_align(v.size())); o.via.bin.ptr = ptr; o.via.bin.size = static_cast(v.size()); std::memcpy(ptr, v.data(), v.size()); diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 7a69f33a..4b05cc23 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -112,6 +112,10 @@ struct object { template explicit object(const T& v); + template + object(const T& v, zone& z); + + // obsolete template object(const T& v, zone* z); @@ -135,8 +139,8 @@ struct object_kv { }; struct object::with_zone : object { - with_zone(msgpack::zone* zone) : zone(zone) { } - msgpack::zone* zone; + with_zone(msgpack::zone& zone) : zone(zone) { } + msgpack::zone& zone; private: with_zone(); }; @@ -367,7 +371,7 @@ inline object& object::operator=(const T& v) } template -object::object(const T& v, zone* z) +object::object(const T& v, zone& z) { with_zone oz(z); oz << v; @@ -375,6 +379,15 @@ object::object(const T& v, zone* z) via = oz.via; } +template +object::object(const T& v, zone* z) +{ + with_zone oz(*z); + oz << v; + type = oz.type; + via = oz.via; +} + inline object::object(msgpack_object o) { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4755f2d0..ce1aea91 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,6 +14,7 @@ SET (check_PROGRAMS streaming.cpp streaming_c.cpp object.cpp + object_with_zone.cpp version.cpp convert.cpp buffer.cpp diff --git a/test/Makefile.am b/test/Makefile.am index c336e3a6..64b296fd 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -9,6 +9,7 @@ check_PROGRAMS = \ streaming \ streaming_c \ object \ + object_with_zone \ convert \ buffer \ cases \ @@ -35,6 +36,8 @@ streaming_c_SOURCES = streaming_c.cpp object_SOURCES = object.cpp +object_with_zone_SOURCES = object_with_zone.cpp + convert_SOURCES = convert.cpp buffer_SOURCES = buffer.cpp diff --git a/test/buffer.cc b/test/buffer.cc deleted file mode 100644 index 512b0bc4..00000000 --- a/test/buffer.cc +++ /dev/null @@ -1,119 +0,0 @@ -#include -#include -#include -#include -#include -#include - -TEST(buffer, sbuffer) -{ - msgpack::sbuffer sbuf; - sbuf.write("a", 1); - sbuf.write("a", 1); - sbuf.write("a", 1); - - EXPECT_EQ(3, sbuf.size()); - EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 ); - - sbuf.clear(); - sbuf.write("a", 1); - sbuf.write("a", 1); - sbuf.write("a", 1); - - EXPECT_EQ(3, sbuf.size()); - EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 ); -} - - -TEST(buffer, vrefbuffer) -{ - msgpack::vrefbuffer vbuf; - vbuf.write("a", 1); - vbuf.write("a", 1); - vbuf.write("a", 1); - - const struct iovec* vec = vbuf.vector(); - size_t veclen = vbuf.vector_size(); - - msgpack::sbuffer sbuf; - for(size_t i=0; i < veclen; ++i) { - sbuf.write((const char*)vec[i].iov_base, vec[i].iov_len); - } - - EXPECT_EQ(3, sbuf.size()); - EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 ); - - - vbuf.clear(); - vbuf.write("a", 1); - vbuf.write("a", 1); - vbuf.write("a", 1); - - vec = vbuf.vector(); - veclen = vbuf.vector_size(); - - sbuf.clear(); - for(size_t i=0; i < veclen; ++i) { - sbuf.write((const char*)vec[i].iov_base, vec[i].iov_len); - } - - EXPECT_EQ(3, sbuf.size()); - EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 ); -} - - -TEST(buffer, zbuffer) -{ - msgpack::zbuffer zbuf; - zbuf.write("a", 1); - zbuf.write("a", 1); - zbuf.write("a", 1); - - zbuf.flush(); -} - - -TEST(buffer, fbuffer) -{ - FILE* file = tmpfile(); - EXPECT_TRUE( file != NULL ); - - msgpack::fbuffer fbuf(file); - EXPECT_EQ(file, fbuf.file()); - - fbuf.write("a", 1); - fbuf.write("a", 1); - fbuf.write("a", 1); - - fflush(file); - rewind(file); - for (size_t i=0; i < 3; ++i) { - int ch = fgetc(file); - EXPECT_TRUE(ch != EOF); - EXPECT_EQ('a', static_cast(ch)); - } - EXPECT_EQ(EOF, fgetc(file)); - fclose(file); -} - - -TEST(buffer, fbuffer_c) -{ - FILE* file = tmpfile(); - void* fbuf = (void*)file; - - EXPECT_TRUE( file != NULL ); - EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1)); - EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1)); - EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1)); - - fflush(file); - rewind(file); - for (size_t i=0; i < 3; ++i) { - int ch = fgetc(file); - EXPECT_TRUE(ch != EOF); - EXPECT_EQ('a', (char) ch); - } - EXPECT_EQ(EOF, fgetc(file)); - fclose(file); -} diff --git a/test/cases.cc b/test/cases.cc deleted file mode 100644 index 45aace0b..00000000 --- a/test/cases.cc +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include - -static void feed_file(msgpack::unpacker& pac, const char* path) -{ - std::ifstream fin(path); - while(true) { - pac.reserve_buffer(32*1024); - fin.read(pac.buffer(), pac.buffer_capacity()); - if(fin.bad()) { - throw std::runtime_error("read failed"); - } - pac.buffer_consumed(fin.gcount()); - if(fin.fail()) { - break; - } - } -} - -TEST(cases, format) -{ - msgpack::unpacker pac; - msgpack::unpacker pac_compact; - - feed_file(pac, "cases.mpac"); - feed_file(pac_compact, "cases_compact.mpac"); - - msgpack::unpacked result; - while(pac.next(&result)) { - msgpack::unpacked result_compact; - EXPECT_TRUE( pac_compact.next(&result_compact) ); - EXPECT_EQ(result_compact.get(), result.get()); - } - - EXPECT_FALSE( pac_compact.next(&result) ); -} - diff --git a/test/convert.cc b/test/convert.cc deleted file mode 100644 index dcda77c6..00000000 --- a/test/convert.cc +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include - -class compatibility { -public: - compatibility() : str1("default"), str2("default") { } - - std::string str1; - std::string str2; - - MSGPACK_DEFINE(str1, str2); -}; - -TEST(convert, compatibility_less) -{ - std::vector src(1); - src[0] = "kumofs"; - - msgpack::zone z; - msgpack::object obj(src, &z); - - compatibility c; - EXPECT_NO_THROW( obj.convert(&c) ); - - EXPECT_EQ("kumofs", c.str1); - EXPECT_EQ("default", c.str2); -} - -TEST(convert, compatibility_more) -{ - std::vector src(3); - src[0] = "kumofs"; - src[1] = "mpio"; - src[2] = "cloudy"; - - msgpack::zone z; - msgpack::object obj(src, &z); - - compatibility to; - EXPECT_NO_THROW( obj.convert(&to) ); - - EXPECT_EQ("kumofs", to.str1); - EXPECT_EQ("mpio", to.str2); -} - - -class enum_member { -public: - enum_member() : flag(A) { } - - enum flags_t { - A = 0, - B = 1 - }; - - flags_t flag; - - MSGPACK_DEFINE(flag); -}; - -MSGPACK_ADD_ENUM(enum_member::flags_t); - -TEST(convert, enum_member) -{ - enum_member src; - src.flag = enum_member::B; - - msgpack::zone z; - msgpack::object obj(src, &z); - - enum_member to; - EXPECT_NO_THROW( obj.convert(&to) ); - - EXPECT_EQ(enum_member::B, to.flag); -} - diff --git a/test/fixint.cc b/test/fixint.cc deleted file mode 100644 index cf109ae5..00000000 --- a/test/fixint.cc +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include - -template -void check_size(size_t size) { - T v(0); - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, v); - EXPECT_EQ(size, sbuf.size()); -} - -TEST(fixint, size) -{ - check_size(2); - check_size(3); - check_size(5); - check_size(9); - - check_size(2); - check_size(3); - check_size(5); - check_size(9); -} - - -template -void check_convert() { - T v1(-11); - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, v1); - - msgpack::unpacked msg; - msgpack::unpack(&msg, sbuf.data(), sbuf.size()); - - T v2; - msg.get().convert(&v2); - - EXPECT_EQ(v1.get(), v2.get()); - - EXPECT_EQ(msg.get(), msgpack::object(T(v1.get()))); -} - -TEST(fixint, convert) -{ - check_convert(); - check_convert(); - check_convert(); - check_convert(); - - check_convert(); - check_convert(); - check_convert(); - check_convert(); -} - diff --git a/test/fixint_c.cc b/test/fixint_c.cc deleted file mode 100644 index d9dc5180..00000000 --- a/test/fixint_c.cc +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -TEST(fixint, size) -{ - msgpack_sbuffer* sbuf = msgpack_sbuffer_new(); - msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write); - - size_t sum = 0; - - EXPECT_EQ(0, msgpack_pack_fix_int8(pk, 0)); - EXPECT_EQ(sum+=2, sbuf->size); - EXPECT_EQ(0, msgpack_pack_fix_int16(pk, 0)); - EXPECT_EQ(sum+=3, sbuf->size); - EXPECT_EQ(0, msgpack_pack_fix_int32(pk, 0)); - EXPECT_EQ(sum+=5, sbuf->size); - EXPECT_EQ(0, msgpack_pack_fix_int64(pk, 0)); - EXPECT_EQ(sum+=9, sbuf->size); - - EXPECT_EQ(0, msgpack_pack_fix_uint8(pk, 0)); - EXPECT_EQ(sum+=2, sbuf->size); - EXPECT_EQ(0, msgpack_pack_fix_uint16(pk, 0)); - EXPECT_EQ(sum+=3, sbuf->size); - EXPECT_EQ(0, msgpack_pack_fix_uint32(pk, 0)); - EXPECT_EQ(sum+=5, sbuf->size); - EXPECT_EQ(0, msgpack_pack_fix_uint64(pk, 0)); - EXPECT_EQ(sum+=9, sbuf->size); - - msgpack_sbuffer_free(sbuf); - msgpack_packer_free(pk); -} - diff --git a/test/msgpack_tuple.cc b/test/msgpack_tuple.cc deleted file mode 100644 index 9779d06a..00000000 --- a/test/msgpack_tuple.cc +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include - - -TEST(msgpack_tuple, member_get) -{ - msgpack::type::tuple t1(42, true, "ABC"); - EXPECT_EQ(42, t1.get<0>()); - EXPECT_EQ(true, t1.get<1>()); - EXPECT_EQ("ABC", t1.get<2>()); - t1.get<0>() = 40; - t1.get<1>() = false; - t1.get<2>() = "DEFG"; - EXPECT_EQ(40, t1.get<0>()); - EXPECT_EQ(false, t1.get<1>()); - EXPECT_EQ("DEFG", t1.get<2>()); -} - -TEST(msgpack_tuple, non_member_get) -{ - msgpack::type::tuple t1(42, true, "ABC"); - EXPECT_EQ(42, msgpack::type::get<0>(t1)); - EXPECT_EQ(true, msgpack::type::get<1>(t1)); - EXPECT_EQ("ABC", msgpack::type::get<2>(t1)); - msgpack::type::get<0>(t1) = 40; - msgpack::type::get<1>(t1) = false; - msgpack::type::get<2>(t1) = "DEFG"; - EXPECT_EQ(40, msgpack::type::get<0>(t1)); - EXPECT_EQ(false, msgpack::type::get<1>(t1)); - EXPECT_EQ("DEFG", msgpack::type::get<2>(t1)); -} - -#if __cplusplus >= 201103 -TEST(msgpack_tuple, std_non_member_get) -{ - msgpack::type::tuple t1(42, true, "ABC"); - EXPECT_EQ(42, std::get<0>(t1)); - EXPECT_EQ(true, std::get<1>(t1)); - EXPECT_EQ("ABC", std::get<2>(t1)); - std::get<0>(t1) = 40; - std::get<1>(t1) = false; - std::get<2>(t1) = "DEFG"; - EXPECT_EQ(40, std::get<0>(t1)); - EXPECT_EQ(false, std::get<1>(t1)); - EXPECT_EQ("DEFG", std::get<2>(t1)); -} - -TEST(msgpack_tuple, make_tuple) -{ - msgpack::type::tuple t1 = msgpack::type::make_tuple(42, true, "ABC"); - EXPECT_EQ(42, t1.get<0>()); - EXPECT_EQ(true, t1.get<1>()); - EXPECT_EQ("ABC", t1.get<2>()); - t1.get<0>() = 40; - t1.get<1>() = false; - t1.get<2>() = "DEFG"; - EXPECT_EQ(40, t1.get<0>()); - EXPECT_EQ(false, t1.get<1>()); - EXPECT_EQ("DEFG", t1.get<2>()); -} - -TEST(msgpack_tuple, std_make_tuple) -{ - msgpack::type::tuple t1 = std::make_tuple(42, true, "ABC"); - EXPECT_EQ(42, t1.get<0>()); - EXPECT_EQ(true, t1.get<1>()); - EXPECT_EQ("ABC", t1.get<2>()); -} - -TEST(msgpack_tuple, tie) -{ - int i(43); - bool b(false); - std::string s("DEFG"); - msgpack::type::tie(i, b, s) = msgpack::type::make_tuple(42, true, "ABC"); - EXPECT_EQ(42, i); - EXPECT_EQ(true, b); - EXPECT_EQ("ABC", s); -} - -TEST(msgpack_tuple, tuple_cat) -{ - msgpack::type::tuple t1 = msgpack::type::make_tuple(42); - msgpack::type::tuple t2 = msgpack::type::make_tuple(true, "ABC"); - msgpack::type::tuple t3 = msgpack::type::tuple_cat(t1, std::move(t2)); - EXPECT_EQ(42, t3.get<0>()); - EXPECT_EQ(true, t3.get<1>()); - EXPECT_EQ("ABC", t3.get<2>()); -} - -TEST(msgpack_tuple, swap) -{ - msgpack::type::tuple t1 = msgpack::type::make_tuple(42, true, "ABC"); - msgpack::type::tuple t2 = msgpack::type::make_tuple(40, false, "DEFG"); - msgpack::type::swap(t1, t2); - EXPECT_EQ(42, t2.get<0>()); - EXPECT_EQ(true, t2.get<1>()); - EXPECT_EQ("ABC", t2.get<2>()); - EXPECT_EQ(40, t1.get<0>()); - EXPECT_EQ(false, t1.get<1>()); - EXPECT_EQ("DEFG", t1.get<2>()); -} -#endif diff --git a/test/object.cc b/test/object.cc deleted file mode 100644 index 88490fb5..00000000 --- a/test/object.cc +++ /dev/null @@ -1,125 +0,0 @@ -#include -#include - -struct myclass { - myclass() : num(0), str("default") { } - - myclass(int num, const std::string& str) : - num(0), str("default") { } - - ~myclass() { } - - int num; - std::string str; - - MSGPACK_DEFINE(num, str); - - bool operator==(const myclass& o) const - { - return num == o.num && str == o.str; - } -}; - -std::ostream& operator<<(std::ostream& o, const myclass& m) -{ - return o << "myclass("<()); -} - - -TEST(object, print) -{ - msgpack::object obj; - std::cout << obj << std::endl; -} - - -TEST(object, is_nil) -{ - msgpack::object obj; - EXPECT_TRUE(obj.is_nil()); -} - - -TEST(object, type_error) -{ - msgpack::object obj(1); - EXPECT_THROW(obj.as(), msgpack::type_error); - EXPECT_THROW(obj.as >(), msgpack::type_error); - EXPECT_EQ(1, obj.as()); - EXPECT_EQ(1, obj.as()); - EXPECT_EQ(1u, obj.as()); - EXPECT_EQ(1u, obj.as()); -} - - -TEST(object, equal_primitive) -{ - msgpack::object obj_nil; - EXPECT_EQ(obj_nil, msgpack::object()); - - msgpack::object obj_int(1); - EXPECT_EQ(obj_int, msgpack::object(1)); - EXPECT_EQ(obj_int, 1); - - msgpack::object obj_double(1.2); - EXPECT_EQ(obj_double, msgpack::object(1.2)); - EXPECT_EQ(obj_double, 1.2); - - msgpack::object obj_bool(true); - EXPECT_EQ(obj_bool, msgpack::object(true)); - EXPECT_EQ(obj_bool, true); -} - - -TEST(object, construct_primitive) -{ - msgpack::object obj_nil; - EXPECT_EQ(msgpack::type::NIL, obj_nil.type); - - msgpack::object obj_uint(1); - EXPECT_EQ(msgpack::type::POSITIVE_INTEGER, obj_uint.type); - EXPECT_EQ(1u, obj_uint.via.u64); - - msgpack::object obj_int(-1); - EXPECT_EQ(msgpack::type::NEGATIVE_INTEGER, obj_int.type); - EXPECT_EQ(-1, obj_int.via.i64); - - msgpack::object obj_double(1.2); - EXPECT_EQ(msgpack::type::DOUBLE, obj_double.type); - EXPECT_EQ(1.2, obj_double.via.dec); - - msgpack::object obj_bool(true); - EXPECT_EQ(msgpack::type::BOOLEAN, obj_bool.type); - EXPECT_EQ(true, obj_bool.via.boolean); -} diff --git a/test/object_with_zone.cpp b/test/object_with_zone.cpp new file mode 100644 index 00000000..123e570c --- /dev/null +++ b/test/object_with_zone.cpp @@ -0,0 +1,662 @@ +#include +#include +#include + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +using namespace std; + +const unsigned int kLoop = 10000; +const unsigned int kElements = 100; +const double kEPS = 1e-10; + +// bool +TEST(object_with_zone, bool) +{ + bool v = true; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = false; + EXPECT_TRUE(obj.as()); +} + +// char +TEST(object_with_zone, char) +{ + char v = 1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = 2; + EXPECT_EQ(obj.as(), 1); +} + +// signed integer family +TEST(object_with_zone, signed_char) +{ + signed char v = -1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = -2; + EXPECT_EQ(obj.as(), -1); +} + +TEST(object_with_zone, signed_short) +{ + signed short v = -1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = -2; + EXPECT_EQ(obj.as(), -1); +} + +TEST(object_with_zone, signed_int) +{ + signed int v = -1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = -2; + EXPECT_EQ(obj.as(), -1); +} + +TEST(object_with_zone, signed_long) +{ + signed long v = -1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = -2; + EXPECT_EQ(obj.as(), -1); +} + +TEST(object_with_zone, signed_long_long) +{ + signed long long v = -1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = -2; + EXPECT_EQ(obj.as(), -1); +} + +// unsigned integer family +TEST(object_with_zone, unsigned_char) +{ + unsigned char v = 1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = 2; + EXPECT_EQ(obj.as(), 1); +} + +TEST(object_with_zone, unsigned_short) +{ + unsigned short v = 1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = 2; + EXPECT_EQ(obj.as(), 1); +} + +TEST(object_with_zone, unsigned_int) +{ + unsigned int v = 1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = 2; + EXPECT_EQ(obj.as(), 1); +} + +TEST(object_with_zone, unsigned_long) +{ + unsigned long v = 1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = 2; + EXPECT_EQ(obj.as(), 1); +} + +TEST(object_with_zone, unsigned_long_long) +{ + unsigned long long v = 1; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v = 2; + EXPECT_EQ(obj.as(), 1); +} + +// float +TEST(object_with_zone, float) +{ + float v = 1.23; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_TRUE(fabs(obj.as() - v) <= kEPS); + v = 4.56; + EXPECT_TRUE(fabs(obj.as() - static_cast(1.23)) <= kEPS); +} + +// double +TEST(object_with_zone, double) +{ + double v = 1.23; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_TRUE(fabs(obj.as() - v) <= kEPS); + v = 4.56; + EXPECT_TRUE(fabs(obj.as() - 1.23) <= kEPS); +} + +// vector + +TEST(object_with_zone, vector) +{ + for (unsigned int k = 0; k < kLoop; k++) { + vector v1; + v1.push_back(1); + for (unsigned int i = 1; i < kElements; i++) + v1.push_back(i); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as >(), v1); + v1.front() = 42; + EXPECT_EQ(obj.as >().front(), 1); + } +} + +// vector_char +TEST(object_with_zone, vector_char) +{ + for (unsigned int k = 0; k < kLoop; k++) { + vector v1; + v1.push_back(1); + for (unsigned int i = 1; i < kElements; i++) + v1.push_back(static_cast(i)); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as >(), v1); + v1.front() = 42; + EXPECT_EQ(obj.as >().front(), 1); + } +} + +TEST(object_without_zone, vector_char) +{ + for (unsigned int k = 0; k < kLoop; k++) { + vector v1; + v1.push_back(1); + for (unsigned int i = 1; i < kElements; i++) + v1.push_back(static_cast(i)); + msgpack::object obj(v1); + EXPECT_EQ(obj.as >(), v1); + v1.front() = 42; + // obj refer to v1 + EXPECT_EQ(obj.as >().front(), 42); + } +} + +// list +TEST(object_with_zone, list) +{ + for (unsigned int k = 0; k < kLoop; k++) { + list v1; + v1.push_back(1); + for (unsigned int i = 1; i < kElements; i++) + v1.push_back(i); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as >(), v1); + v1.front() = 42; + EXPECT_EQ(obj.as >().front(), 1); + } +} + +// deque +TEST(object_with_zone, deque) +{ + for (unsigned int k = 0; k < kLoop; k++) { + deque v1; + v1.push_back(1); + for (unsigned int i = 1; i < kElements; i++) + v1.push_back(i); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as >(), v1); + v1.front() = 42; + EXPECT_EQ(obj.as >().front(), 1); + } +} + +// string +TEST(object_with_zone, string) +{ + string v = "abc"; + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v[0] = 'd'; + EXPECT_EQ(obj.as()[0], 'a'); +} + +TEST(object_without_zone, string) +{ + string v = "abc"; + msgpack::zone z; + msgpack::object obj(v); + EXPECT_EQ(obj.as(), v); + v[0] = 'd'; + EXPECT_EQ(obj.as()[0], 'd'); +} + +// raw_ref +TEST(object_with_zone, raw_ref) +{ + string s = "abc"; + msgpack::type::raw_ref v(s.data(), s.size()); + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + s[0] = 'd'; + // even if with_zone, not copied due to raw_ref + // Basically, the combination raw_ref and object::wit_zone + // is meaningless. + EXPECT_EQ(obj.as(), v); +} + +TEST(object_without_zone, raw_ref) +{ + string s = "abc"; + msgpack::type::raw_ref v(s.data(), s.size()); + msgpack::zone z; + msgpack::object obj(v); + EXPECT_EQ(obj.as(), v); + s[0] = 'd'; + EXPECT_EQ(obj.as(), v); +} + +// pair +TEST(object_with_zone, pair) +{ + typedef pair test_t; + test_t v(1, "abc"); + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); + v.first = 42; + EXPECT_EQ(obj.as().first, 1); +} + +// set +TEST(object_with_zone, set) +{ + for (unsigned int k = 0; k < kLoop; k++) { + set v1; + for (unsigned int i = 0; i < kElements; i++) + v1.insert(i); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as >(), v1); + } +} + +// multiset +TEST(object_with_zone, multiset) +{ + for (unsigned int k = 0; k < kLoop; k++) { + multiset v1; + for (unsigned int i = 0; i < kElements; i++) + v1.insert(i % (kElements / 2)); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as >(), v1); + } +} + +// map +TEST(object_with_zone, map) +{ + typedef map test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) + v1.insert(std::make_pair(i, i*2)); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as(), v1); + } +} + +// multimap +TEST(object_with_zone, multimap) +{ + typedef multimap test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) + v1.insert(std::make_pair(i % (kElements / 2), i*2)); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as(), v1); + } +} + +// msgpack_tuple +TEST(object_with_zone, msgpack_tuple) +{ + typedef msgpack::type::tuple test_t; + test_t v(1, "abc", true); + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(msgpack::type::get<0>(obj.as()), 1); + EXPECT_EQ(msgpack::type::get<1>(obj.as()), "abc"); + EXPECT_EQ(msgpack::type::get<2>(obj.as()), true); + msgpack::type::get<0>(v) = 42; + EXPECT_EQ(msgpack::type::get<0>(obj.as()), 1); +} + +// TR1 + +#ifdef MSGPACK_HAS_STD_TR1_UNOURDERED_MAP +#include +#include "msgpack/adaptor/tr1/unordered_map.hpp" +TEST(object_with_zone, tr1_unordered_map) +{ + typedef tr1::unordered_map test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) + v1[rand()] = rand(); + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + EXPECT_EQ(v1.size(), v2.size()); + test_t::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) { + EXPECT_TRUE(v2.find(it->first) != v2.end()); + EXPECT_EQ(it->second, v2.find(it->first)->second); + } + } +} + + +TEST(object_with_zone, tr1_unordered_multimap) +{ + typedef tr1::unordered_multimap test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) { + int i1 = rand(); + v1.insert(make_pair(i1, rand())); + v1.insert(make_pair(i1, rand())); + } + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + vector > vec1, vec2; + tr1::unordered_multimap::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) + vec1.push_back(make_pair(it->first, it->second)); + for (it = v2.begin(); it != v2.end(); ++it) + vec2.push_back(make_pair(it->first, it->second)); + EXPECT_EQ(v1.size(), v2.size()); + EXPECT_EQ(vec1.size(), vec2.size()); + sort(vec1.begin(), vec1.end()); + sort(vec2.begin(), vec2.end()); + EXPECT_TRUE(vec1 == vec2); + } +} +#endif + +#ifdef MSGPACK_HAS_STD_TR1_UNOURDERED_SET +#include +#include "msgpack/adaptor/tr1/unordered_set.hpp" +TEST(object_with_zone, tr1_unordered_set) +{ + typedef tr1::unordered_set test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) + v1.insert(rand()); + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + EXPECT_EQ(v1.size(), v2.size()); + tr1::unordered_set::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) + EXPECT_TRUE(v2.find(*it) != v2.end()); + } +} + +TEST(object_with_zone, tr1_unordered_multiset) +{ + typedef tr1::unordered_set test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) { + int i1 = rand(); + v1.insert(i1); + v1.insert(i1); + } + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + vector vec1, vec2; + tr1::unordered_multiset::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) + vec1.push_back(*it); + for (it = v2.begin(); it != v2.end(); ++it) + vec2.push_back(*it); + EXPECT_EQ(v1.size(), v2.size()); + EXPECT_EQ(vec1.size(), vec2.size()); + sort(vec1.begin(), vec1.end()); + sort(vec2.begin(), vec2.end()); + EXPECT_TRUE(vec1 == vec2); + } +} +#endif + +#ifdef MSGPACK_HAS_STD_UNOURDERED_MAP +#include +#include "msgpack/adaptor/tr1/unordered_map.hpp" +TEST(object_with_zone, unordered_map) +{ + typedef unordered_map test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) + v1[rand()] = rand(); + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + EXPECT_EQ(v1.size(), v2.size()); + test_t::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) { + EXPECT_TRUE(v2.find(it->first) != v2.end()); + EXPECT_EQ(it->second, v2.find(it->first)->second); + } + } +} + +TEST(object_with_zone, unordered_multimap) +{ + typedef unordered_multimap test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) { + int i1 = rand(); + v1.insert(make_pair(i1, rand())); + v1.insert(make_pair(i1, rand())); + } + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + vector > vec1, vec2; + tr1::unordered_multimap::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) + vec1.push_back(make_pair(it->first, it->second)); + for (it = v2.begin(); it != v2.end(); ++it) + vec2.push_back(make_pair(it->first, it->second)); + EXPECT_EQ(v1.size(), v2.size()); + EXPECT_EQ(vec1.size(), vec2.size()); + sort(vec1.begin(), vec1.end()); + sort(vec2.begin(), vec2.end()); + EXPECT_TRUE(vec1 == vec2); + } +} +#endif + +#ifdef MSGPACK_HAS_STD_UNOURDERED_SET +#include +#include "msgpack/adaptor/tr1/unordered_set.hpp" +TEST(object_with_zone, unordered_set) +{ + typedef unordered_set test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) + v1.insert(rand()); + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + EXPECT_EQ(v1.size(), v2.size()); + tr1::unordered_set::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) + EXPECT_TRUE(v2.find(*it) != v2.end()); + } +} + +TEST(object_with_zone, unordered_multiset) +{ + typedef unordered_set test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + for (unsigned int i = 0; i < kElements; i++) { + int i1 = rand(); + v1.insert(i1); + v1.insert(i1); + } + msgpack::zone z; + msgpack::object obj(v1, z); + test_t v2 = obj.as(); + vector vec1, vec2; + tr1::unordered_multiset::const_iterator it; + for (it = v1.begin(); it != v1.end(); ++it) + vec1.push_back(*it); + for (it = v2.begin(); it != v2.end(); ++it) + vec2.push_back(*it); + EXPECT_EQ(v1.size(), v2.size()); + EXPECT_EQ(vec1.size(), vec2.size()); + sort(vec1.begin(), vec1.end()); + sort(vec2.begin(), vec2.end()); + EXPECT_TRUE(vec1 == vec2); + } +} +#endif + +// User defined class +class TestClass +{ +public: + TestClass() : i(0), s("kzk") {} + int i; + string s; + MSGPACK_DEFINE(i, s); +}; + +TEST(object_with_zone, user_defined) +{ + TestClass v1; + msgpack::zone z; + msgpack::object obj(v1, z); + TestClass v2 = obj.as(); + EXPECT_EQ(v1.i, v2.i); + EXPECT_EQ(v1.s, v2.s); +} + +#if !defined(MSGPACK_USE_CPP03) + +TEST(object_with_zone, array) +{ + typedef array test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + v1[0] = 1; + for (unsigned int i = 1; i < kElements; i++) + v1[i] = rand(); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as(), v1); + v1.front() = 42; + EXPECT_EQ(obj.as().front(), 1); + } +} + +TEST(object_with_zone, array_char) +{ + typedef array test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + v1[0] = 1; + for (unsigned int i = 1; i < kElements; i++) + v1[i] = rand(); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as(), v1); + v1.front() = 42; + EXPECT_EQ(obj.as().front(), 1); + } +} + +TEST(object_without_zone, array_char) +{ + typedef array test_t; + for (unsigned int k = 0; k < kLoop; k++) { + test_t v1; + v1[0] = 1; + for (unsigned int i = 1; i < kElements; i++) + v1[i] = rand(); + msgpack::object obj(v1); + EXPECT_EQ(obj.as(), v1); + v1.front() = 42; + // obj refer to v1 + EXPECT_EQ(obj.as().front(), 42); + } +} + + +TEST(object_with_zone, forward_list) +{ + for (unsigned int k = 0; k < kLoop; k++) { + forward_list v1; + for (unsigned int i = 0; i < kElements; i++) + v1.push_front(i); + msgpack::zone z; + msgpack::object obj(v1, z); + EXPECT_EQ(obj.as >(), v1); + v1.front() = 42; + EXPECT_EQ(obj.as >().front(), kElements - 1); + } +} + +TEST(object_with_zone, tuple) +{ + typedef tuple test_t; + test_t v(1, "abc", true); + msgpack::zone z; + msgpack::object obj(v, z); + EXPECT_EQ(obj.as(), v); +} + +#endif + diff --git a/test/pack_unpack.cc b/test/pack_unpack.cc deleted file mode 100644 index b95bccde..00000000 --- a/test/pack_unpack.cc +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include -#include - -TEST(pack, num) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); -} - - -TEST(pack, vector) -{ - msgpack::sbuffer sbuf; - std::vector vec; - vec.push_back(1); - vec.push_back(2); - vec.push_back(3); - msgpack::pack(sbuf, vec); -} - - -TEST(pack, to_ostream) -{ - std::ostringstream stream; - msgpack::pack(stream, 1); -} - - -struct myclass { - myclass() : num(0), str("default") { } - - myclass(int num, const std::string& str) : - num(num), str(str) { } - - ~myclass() { } - - int num; - std::string str; - - MSGPACK_DEFINE(num, str); -}; - - -TEST(pack, myclass) -{ - msgpack::sbuffer sbuf; - myclass m(1, "msgpack"); - msgpack::pack(sbuf, m); -} - -TEST(unpack, int_no_offset) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::unpacked msg; - - msgpack::unpack(msg, sbuf.data(), sbuf.size()); - EXPECT_EQ(1, msg.get().as()); -} - -TEST(unpack, int_offset) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::unpacked msg; - - std::size_t off = 0; - - msgpack::unpack(msg, sbuf.data(), sbuf.size(), off); - EXPECT_EQ(1, msg.get().as()); - EXPECT_EQ(off, sbuf.size()); -} - -TEST(unpack, int_pointer) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::unpacked msg; - - std::size_t off = 0; - - // obsolete - msgpack::unpack(&msg, sbuf.data(), sbuf.size(), &off); - EXPECT_EQ(1, msg.get().as()); - EXPECT_EQ(off, sbuf.size()); -} - -TEST(unpack, int_null_pointer) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::unpacked msg; - - // obsolete - msgpack::unpack(&msg, sbuf.data(), sbuf.size(), nullptr); - EXPECT_EQ(1, msg.get().as()); -} - -TEST(unpack, int_default_null_pointer) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::unpacked msg; - - // obsolete - msgpack::unpack(&msg, sbuf.data(), sbuf.size()); - EXPECT_EQ(1, msg.get().as()); -} - -TEST(unpack, sequence) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::pack(sbuf, 2); - msgpack::pack(sbuf, 3); - - std::size_t off = 0; - - msgpack::unpacked msg; - - msgpack::unpack(msg, sbuf.data(), sbuf.size(), off); - EXPECT_EQ(1, msg.get().as()); - - msgpack::unpack(msg, sbuf.data(), sbuf.size(), off); - EXPECT_EQ(2, msg.get().as()); - - msgpack::unpack(msg, sbuf.data(), sbuf.size(), off); - EXPECT_EQ(3, msg.get().as()); - - EXPECT_EQ(off, sbuf.size()); -} diff --git a/test/pack_unpack_c.cc b/test/pack_unpack_c.cc deleted file mode 100644 index 60e0e00e..00000000 --- a/test/pack_unpack_c.cc +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include - -TEST(pack, num) -{ - msgpack_sbuffer* sbuf = msgpack_sbuffer_new(); - msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write); - - EXPECT_EQ(0, msgpack_pack_int(pk, 1)); - - msgpack_sbuffer_free(sbuf); - msgpack_packer_free(pk); -} - - -TEST(pack, array) -{ - msgpack_sbuffer* sbuf = msgpack_sbuffer_new(); - msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write); - - EXPECT_EQ(0, msgpack_pack_array(pk, 3)); - EXPECT_EQ(0, msgpack_pack_int(pk, 1)); - EXPECT_EQ(0, msgpack_pack_int(pk, 2)); - EXPECT_EQ(0, msgpack_pack_int(pk, 3)); - - msgpack_sbuffer_free(sbuf); - msgpack_packer_free(pk); -} - - -TEST(unpack, sequence) -{ - msgpack_sbuffer* sbuf = msgpack_sbuffer_new(); - msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write); - - EXPECT_EQ(0, msgpack_pack_int(pk, 1)); - EXPECT_EQ(0, msgpack_pack_int(pk, 2)); - EXPECT_EQ(0, msgpack_pack_int(pk, 3)); - - msgpack_packer_free(pk); - - bool success; - size_t offset = 0; - - msgpack_unpacked msg; - msgpack_unpacked_init(&msg); - - success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); - EXPECT_TRUE(success); - EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type); - EXPECT_EQ(1, msg.data.via.u64); - - success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); - EXPECT_TRUE(success); - EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type); - EXPECT_EQ(2, msg.data.via.u64); - - success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); - EXPECT_TRUE(success); - EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type); - EXPECT_EQ(3, msg.data.via.u64); - - success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); - EXPECT_FALSE(success); - - msgpack_sbuffer_free(sbuf); - msgpack_unpacked_destroy(&msg); -} - diff --git a/test/reference.cc b/test/reference.cc deleted file mode 100644 index 09ecbca5..00000000 --- a/test/reference.cc +++ /dev/null @@ -1,434 +0,0 @@ -#include -#include - -TEST(reference, unpack_int) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::unpacked ret; - - msgpack::unpack(ret, sbuf.data(), sbuf.size()); - EXPECT_FALSE(ret.referenced()); -} - -TEST(reference, unpack_string) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, std::string("abcdefg")); - msgpack::unpacked ret; - - msgpack::unpack(ret, sbuf.data(), sbuf.size()); - EXPECT_FALSE(ret.referenced()); -} - -TEST(reference, unpack_bin) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char c[] = { 1, 2, 3, 4, 5, 6 }; - packer.pack_bin(sizeof(c)); - packer.pack_bin_body(c, sizeof(c)); - - msgpack::unpacked ret; - msgpack::unpack(ret, sbuf.data(), sbuf.size()); - EXPECT_FALSE(ret.referenced()); -} - -TEST(reference, unpack_ext) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char const buf [] = { 2 }; - - packer.pack_ext(sizeof(buf), 1); - packer.pack_ext_body(buf, sizeof(buf)); - msgpack::unpacked ret; - msgpack::unpack(ret, sbuf.data(), sbuf.size()); - EXPECT_FALSE(ret.referenced()); -} - -bool never_called(msgpack::type::object_type, std::size_t, void*) -{ - EXPECT_TRUE(false); - return false; -} - -bool always_reference(msgpack::type::object_type, std::size_t, void*) -{ - return true; -} - -TEST(reference, unpack_int_ref) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - msgpack::unpacked ret; - - msgpack::unpack(ret, sbuf.data(), sbuf.size(), never_called); - EXPECT_FALSE(ret.referenced()); -} - -TEST(reference, unpack_string_ref) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, std::string("abcdefg")); - msgpack::unpacked ret; - - msgpack::unpack(ret, sbuf.data(), sbuf.size(), always_reference); - EXPECT_TRUE(ret.referenced()); -} - -TEST(reference, unpack_bin_ref) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char c[] = { 1, 2, 3, 4, 5, 6 }; - packer.pack_bin(sizeof(c)); - packer.pack_bin_body(c, sizeof(c)); - - msgpack::unpacked ret; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), always_reference); - EXPECT_TRUE(ret.referenced()); -} - -TEST(reference, unpack_ext_ref) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char const buf [] = { 2 }; - - packer.pack_ext(sizeof(buf), 1); - packer.pack_ext_body(buf, sizeof(buf)); - msgpack::unpacked ret; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), always_reference); - EXPECT_TRUE(ret.referenced()); -} - -static void* s_p; - -bool sized_reference(msgpack::type::object_type t, std::size_t s, void* p) -{ - s_p = p; - switch (t) { - case msgpack::type::STR: - if (s >= 5) return true; - break; - case msgpack::type::BIN: - if (s >= 6) return true; - break; - case msgpack::type::EXT: - if (s >= 7) return true; - break; - default: - EXPECT_TRUE(false); - } - return false; -} - -TEST(reference, unpack_int_sized_ref) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - - msgpack::unpacked ret; - s_p = nullptr; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), never_called, &sbuf); - EXPECT_FALSE(ret.referenced()); - EXPECT_EQ(nullptr, s_p); -} - -TEST(reference, unpack_string_sized_ref_4) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, std::string("1234")); - - msgpack::unpacked ret; - s_p = nullptr; - // the last argument sbuf is any pointer as a user data. - // That is stored to s_p in sized_reference - msgpack::unpack(ret, sbuf.data(), sbuf.size(), sized_reference, &sbuf); - EXPECT_FALSE(ret.referenced()); - // compare the passed argument with stored s_p. - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpack_string_sized_ref_5) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, std::string("12345")); - - msgpack::unpacked ret; - s_p = nullptr; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), sized_reference, &sbuf); - EXPECT_TRUE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - - -TEST(reference, unpack_bin_sized_ref_5) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char c[] = { 1, 2, 3, 4, 5 }; - packer.pack_bin(sizeof(c)); - packer.pack_bin_body(c, sizeof(c)); - - msgpack::unpacked ret; - s_p = nullptr; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), sized_reference, &sbuf); - EXPECT_FALSE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpack_bin_sized_ref_6) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char c[] = { 1, 2, 3, 4, 5, 6 }; - packer.pack_bin(sizeof(c)); - packer.pack_bin_body(c, sizeof(c)); - - msgpack::unpacked ret; - s_p = nullptr; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), sized_reference, &sbuf); - EXPECT_TRUE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpack_ext_sized_ref_6) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char const buf [] = { 1, 2, 3, 4, 5 }; - - packer.pack_ext(sizeof(buf), 1); // 5 + 1(type) = 6 - packer.pack_ext_body(buf, sizeof(buf)); - - msgpack::unpacked ret; - s_p = nullptr; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), sized_reference, &sbuf); - EXPECT_FALSE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpack_ext_sized_ref_7) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char const buf [] = { 1, 2, 3, 4, 5, 6 }; - - packer.pack_ext(sizeof(buf), 1); // 6 + 1(type) = 7 - packer.pack_ext_body(buf, sizeof(buf)); - - msgpack::unpacked ret; - s_p = nullptr; - msgpack::unpack(ret, sbuf.data(), sbuf.size(), sized_reference, &sbuf); - EXPECT_TRUE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -// default reference function -// STR, BIN, and EXT are always referenced, otherwise copied (converted). - -TEST(reference, unpacker_int) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - - msgpack::unpacker unp; - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_FALSE(ret.referenced()); -} - -TEST(reference, unpacker_string) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, std::string("a")); - - msgpack::unpacker unp; - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_TRUE(ret.referenced()); -} - -TEST(reference, unpacker_bin) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char c[] = { 1 }; - packer.pack_bin(sizeof(c)); - packer.pack_bin_body(c, sizeof(c)); - - msgpack::unpacker unp; - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_TRUE(ret.referenced()); -} - -TEST(reference, unpacker_ext) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char const buf [] = { 2 }; - - packer.pack_ext(sizeof(buf), 1); - packer.pack_ext_body(buf, sizeof(buf)); - - msgpack::unpacker unp; - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_TRUE(ret.referenced()); -} - -// pass user custom reference function - -TEST(reference, unpacker_int_sized_ref) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, 1); - - msgpack::unpacker unp(never_called, &sbuf); - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - s_p = nullptr; - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_FALSE(ret.referenced()); - EXPECT_EQ(nullptr, s_p); -} - -TEST(reference, unpacker_string_sized_ref_4) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, std::string("1234")); - - msgpack::unpacker unp(sized_reference, &sbuf); - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - s_p = nullptr; - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_FALSE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpacker_string_sized_ref_5) -{ - msgpack::sbuffer sbuf; - msgpack::pack(sbuf, std::string("12345")); - - msgpack::unpacker unp(sized_reference, &sbuf); - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - s_p = nullptr; - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_TRUE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - - -TEST(reference, unpacker_bin_sized_ref_5) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char c[] = { 1, 2, 3, 4, 5 }; - packer.pack_bin(sizeof(c)); - packer.pack_bin_body(c, sizeof(c)); - - msgpack::unpacker unp(sized_reference, &sbuf); - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - s_p = nullptr; - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_FALSE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpacker_bin_sized_ref_6) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char c[] = { 1, 2, 3, 4, 5, 6 }; - packer.pack_bin(sizeof(c)); - packer.pack_bin_body(c, sizeof(c)); - - msgpack::unpacker unp(sized_reference, &sbuf); - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - s_p = nullptr; - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_TRUE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpacker_ext_sized_ref_6) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char const buf [] = { 1, 2, 3, 4, 5 }; - - packer.pack_ext(sizeof(buf), 1); // 5 + 1(type) = 6 - packer.pack_ext_body(buf, sizeof(buf)); - - msgpack::unpacker unp(sized_reference, &sbuf); - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - s_p = nullptr; - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_FALSE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} - -TEST(reference, unpacker_ext_sized_ref_7) -{ - msgpack::sbuffer sbuf; - msgpack::packer packer(sbuf); - char const buf [] = { 1, 2, 3, 4, 5, 6 }; - - packer.pack_ext(sizeof(buf), 1); // 6 + 1(type) = 7 - packer.pack_ext_body(buf, sizeof(buf)); - - msgpack::unpacker unp(sized_reference, &sbuf); - msgpack::unpacked ret; - unp.reserve_buffer(sbuf.size()); - std::memcpy(unp.buffer(), sbuf.data(), sbuf.size()); - unp.buffer_consumed(sbuf.size()); - s_p = nullptr; - bool b = unp.next(ret); - EXPECT_TRUE(b); - EXPECT_TRUE(ret.referenced()); - EXPECT_EQ(&sbuf, s_p); -} diff --git a/test/streaming.cc b/test/streaming.cc deleted file mode 100644 index 2daa98a1..00000000 --- a/test/streaming.cc +++ /dev/null @@ -1,316 +0,0 @@ -#include -#include -#include - -TEST(streaming, basic) -{ - msgpack::sbuffer buffer; - - msgpack::packer pk(&buffer); - pk.pack(1); - pk.pack(2); - pk.pack(3); - - const char* input = buffer.data(); - const char* const eof = input + buffer.size(); - - msgpack::unpacker pac; - msgpack::unpacked result; - - int count = 0; - while(count < 3) { - pac.reserve_buffer(32*1024); - - // read buffer into pac.buffer() upto - // pac.buffer_capacity() bytes. - size_t len = 1; - memcpy(pac.buffer(), input, len); - input += len; - - pac.buffer_consumed(len); - - while(pac.next(result)) { - msgpack::object obj = result.get(); - switch(count++) { - case 0: - EXPECT_EQ(1, obj.as()); - break; - case 1: - EXPECT_EQ(2, obj.as()); - break; - case 2: - EXPECT_EQ(3, obj.as()); - return; - } - } - - EXPECT_TRUE(input < eof); - } -} - -TEST(streaming, basic_pointer) -{ - msgpack::sbuffer buffer; - - msgpack::packer pk(&buffer); - pk.pack(1); - pk.pack(2); - pk.pack(3); - - const char* input = buffer.data(); - const char* const eof = input + buffer.size(); - - msgpack::unpacker pac; - msgpack::unpacked result; - - int count = 0; - while(count < 3) { - pac.reserve_buffer(32*1024); - - // read buffer into pac.buffer() upto - // pac.buffer_capacity() bytes. - size_t len = 1; - memcpy(pac.buffer(), input, len); - input += len; - - pac.buffer_consumed(len); - - while(pac.next(&result)) { - msgpack::object obj = result.get(); - switch(count++) { - case 0: - EXPECT_EQ(1, obj.as()); - break; - case 1: - EXPECT_EQ(2, obj.as()); - break; - case 2: - EXPECT_EQ(3, obj.as()); - return; - } - } - - EXPECT_TRUE(input < eof); - } -} - -#if !defined(MSGPACK_USE_CPP03) - -TEST(streaming, move) -{ - msgpack::sbuffer buffer; - - msgpack::packer pk(&buffer); - pk.pack(1); - pk.pack(2); - pk.pack(3); - - const char* input = buffer.data(); - const char* const eof = input + buffer.size(); - - msgpack::unpacker pac; - msgpack::unpacked result; - - int count = 0; - while(count < 3) { - msgpack::unpacker pac_in(std::move(pac)); - pac_in.reserve_buffer(32*1024); - - // read buffer into pac_in.buffer() upto - // pac_in.buffer_capac_inity() bytes. - size_t len = 1; - memcpy(pac_in.buffer(), input, len); - input += len; - - pac_in.buffer_consumed(len); - - while(pac_in.next(result)) { - msgpack::object obj = result.get(); - switch(count++) { - case 0: - EXPECT_EQ(1, obj.as()); - break; - case 1: - EXPECT_EQ(2, obj.as()); - break; - case 2: - EXPECT_EQ(3, obj.as()); - return; - } - } - - EXPECT_TRUE(input < eof); - pac = std::move(pac_in); - } -} - -#endif // !defined(MSGPACK_USE_CPP03) - -class event_handler { -public: - event_handler(std::istream& input) : input(input) { } - ~event_handler() { } - - void on_read() - { - while(true) { - pac.reserve_buffer(32*1024); - - size_t len = input.readsome(pac.buffer(), pac.buffer_capacity()); - - if(len == 0) { - return; - } - - pac.buffer_consumed(len); - - msgpack::unpacked result; - while(pac.next(result)) { - on_message(result.get(), msgpack::move(result.zone())); - } - - if(pac.message_size() > 10*1024*1024) { - throw std::runtime_error("message is too large"); - } - } - } - - void on_message(msgpack::object obj, msgpack::unique_ptr z) - { - EXPECT_EQ(expect, obj.as()); - } - - int expect; - -private: - std::istream& input; - msgpack::unpacker pac; -}; - -TEST(streaming, event) -{ - std::stringstream stream; - msgpack::packer pk(&stream); - - event_handler handler(stream); - - pk.pack(1); - handler.expect = 1; - handler.on_read(); - - pk.pack(2); - handler.expect = 2; - handler.on_read(); - - pk.pack(3); - handler.expect = 3; - handler.on_read(); -} - - -// backward compatibility -TEST(streaming, basic_compat) -{ - std::ostringstream stream; - msgpack::packer pk(&stream); - - pk.pack(1); - pk.pack(2); - pk.pack(3); - - std::istringstream input(stream.str()); - - msgpack::unpacker pac; - - int count = 0; - while(count < 3) { - pac.reserve_buffer(32*1024); - - size_t len = input.readsome(pac.buffer(), pac.buffer_capacity()); - pac.buffer_consumed(len); - - while(pac.execute()) { - msgpack::unique_ptr z(pac.release_zone()); - msgpack::object obj = pac.data(); - pac.reset(); - - switch(count++) { - case 0: - EXPECT_EQ(1, obj.as()); - break; - case 1: - EXPECT_EQ(2, obj.as()); - break; - case 2: - EXPECT_EQ(3, obj.as()); - return; - } - - } - } -} - - -// backward compatibility -class event_handler_compat { -public: - event_handler_compat(std::istream& input) : input(input) { } - ~event_handler_compat() { } - - void on_read() - { - while(true) { - pac.reserve_buffer(32*1024); - - size_t len = input.readsome(pac.buffer(), pac.buffer_capacity()); - - if(len == 0) { - return; - } - - pac.buffer_consumed(len); - - while(pac.execute()) { - msgpack::unique_ptr z(pac.release_zone()); - msgpack::object obj = pac.data(); - pac.reset(); - on_message(obj, msgpack::move(z)); - } - - if(pac.message_size() > 10*1024*1024) { - throw std::runtime_error("message is too large"); - } - } - } - - void on_message(msgpack::object obj, msgpack::unique_ptr z) - { - EXPECT_EQ(expect, obj.as()); - } - - int expect; - -private: - std::istream& input; - msgpack::unpacker pac; -}; - -TEST(streaming, event_compat) -{ - std::stringstream stream; - msgpack::packer pk(&stream); - - event_handler_compat handler(stream); - - pk.pack(1); - handler.expect = 1; - handler.on_read(); - - pk.pack(2); - handler.expect = 2; - handler.on_read(); - - pk.pack(3); - handler.expect = 3; - handler.on_read(); -} diff --git a/test/streaming_c.cc b/test/streaming_c.cc deleted file mode 100644 index 159eef76..00000000 --- a/test/streaming_c.cc +++ /dev/null @@ -1,114 +0,0 @@ -#include -#include -#include - -TEST(streaming, basic) -{ - msgpack_sbuffer* buffer = msgpack_sbuffer_new(); - - msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write); - - // 1, 2, 3, "str", ["str_data"], "bin", ["bin_data"], {0.3: 0.4} - EXPECT_EQ(0, msgpack_pack_int(pk, 1)); - EXPECT_EQ(0, msgpack_pack_int(pk, 2)); - EXPECT_EQ(0, msgpack_pack_int(pk, 3)); - EXPECT_EQ(0, msgpack_pack_str(pk, 3)); - EXPECT_EQ(0, msgpack_pack_str_body(pk, "str", 3)); - EXPECT_EQ(0, msgpack_pack_array(pk, 1)); - EXPECT_EQ(0, msgpack_pack_str(pk, 8)); - EXPECT_EQ(0, msgpack_pack_str_body(pk, "str_data", 8)); - EXPECT_EQ(0, msgpack_pack_bin(pk, 3)); - EXPECT_EQ(0, msgpack_pack_bin_body(pk, "bin", 3)); - EXPECT_EQ(0, msgpack_pack_array(pk, 1)); - EXPECT_EQ(0, msgpack_pack_bin(pk, 8)); - EXPECT_EQ(0, msgpack_pack_bin_body(pk, "bin_data", 8)); - EXPECT_EQ(0, msgpack_pack_map(pk, 1)); - EXPECT_EQ(0, msgpack_pack_float(pk, 0.4)); - EXPECT_EQ(0, msgpack_pack_double(pk, 0.8)); - int max_count = 6; - - msgpack_packer_free(pk); - - const char* input = buffer->data; - const char* const eof = input + buffer->size; - - msgpack_unpacker pac; - msgpack_unpacker_init(&pac, MSGPACK_UNPACKER_INIT_BUFFER_SIZE); - - msgpack_unpacked result; - msgpack_unpacked_init(&result); - - int count = 0; - while(count < max_count) { - bool unpacked = false; - - msgpack_unpacker_reserve_buffer(&pac, 32*1024); - - while(!unpacked) { - /* read buffer into msgpack_unapcker_buffer(&pac) upto - * msgpack_unpacker_buffer_capacity(&pac) bytes. */ - memcpy(msgpack_unpacker_buffer(&pac), input, 1); - input += 1; - - EXPECT_TRUE(input <= eof); - - msgpack_unpacker_buffer_consumed(&pac, 1); - - while(msgpack_unpacker_next(&pac, &result) == MSGPACK_UNPACK_SUCCESS) { - unpacked = 1; - msgpack_object obj = result.data; - msgpack_object e; - switch(count++) { - case 0: - EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type); - EXPECT_EQ(1, obj.via.u64); - break; - case 1: - EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type); - EXPECT_EQ(2, obj.via.u64); - break; - case 2: - EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type); - EXPECT_EQ(3, obj.via.u64); - break; - case 3: - EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type); - EXPECT_EQ(std::string("str",3), std::string(obj.via.str.ptr, obj.via.str.size)); - break; - case 4: - EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type); - EXPECT_EQ(1, obj.via.array.size); - e = obj.via.array.ptr[0]; - EXPECT_EQ(MSGPACK_OBJECT_STR, e.type); - EXPECT_EQ(std::string("str_data",8), std::string(e.via.str.ptr, e.via.str.size)); - break; - case 5: - EXPECT_EQ(MSGPACK_OBJECT_BIN, obj.type); - EXPECT_EQ(std::string("bin",3), std::string(obj.via.bin.ptr, obj.via.bin.size)); - break; - case 6: - EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type); - EXPECT_EQ(1, obj.via.array.size); - e = obj.via.array.ptr[0]; - EXPECT_EQ(MSGPACK_OBJECT_BIN, e.type); - EXPECT_EQ(std::string("bin_data",8), std::string(e.via.bin.ptr, e.via.bin.size)); - break; - case 7: - EXPECT_EQ(MSGPACK_OBJECT_MAP, obj.type); - EXPECT_EQ(1, obj.via.map.size); - e = obj.via.map.ptr[0].key; - EXPECT_EQ(MSGPACK_OBJECT_DOUBLE, e.type); - ASSERT_FLOAT_EQ(0.4, (float)e.via.dec); - e = obj.via.map.ptr[0].val; - EXPECT_EQ(MSGPACK_OBJECT_DOUBLE, e.type); - ASSERT_DOUBLE_EQ(0.8, e.via.dec); - break; - } - } - } - } - - msgpack_unpacker_destroy(&pac); - msgpack_unpacked_destroy(&result); -} - diff --git a/test/version.cc b/test/version.cc deleted file mode 100644 index d2809b21..00000000 --- a/test/version.cc +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -TEST(version, print) -{ - printf("MSGPACK_VERSION : %s\n", MSGPACK_VERSION); - printf("MSGPACK_VERSION_MAJOR : %d\n", MSGPACK_VERSION_MAJOR); - printf("MSGPACK_VERSION_MINOR : %d\n", MSGPACK_VERSION_MINOR); - printf("msgpack_version() : %s\n", msgpack_version()); - printf("msgpack_version_major() : %d\n", msgpack_version_major()); - printf("msgpack_version_minor() : %d\n", msgpack_version_minor()); -} - diff --git a/test/zone.cc b/test/zone.cc deleted file mode 100644 index b2dc543e..00000000 --- a/test/zone.cc +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include - -TEST(zone, allocate_align) -{ - msgpack::zone z; - char* buf1 = (char*)z.allocate_align(4); - memcpy(buf1, "test", 4); - char* buf2 = (char*)z.allocate_align(4); - memcpy(buf2, "test", 4); -} - - -class myclass { -public: - myclass() : num(0), str("default") { } - - myclass(int num, const std::string& str) : - num(num), str(str) { } - - ~myclass() { } - - int num; - std::string str; - -private: - myclass(const myclass&); -}; - - -TEST(zone, allocate) -{ - msgpack::zone z; - myclass* m = z.allocate(); - EXPECT_EQ(m->num, 0); - EXPECT_EQ(m->str, "default"); -} - - -TEST(zone, allocate_constructor) -{ - msgpack::zone z; - myclass* m = z.allocate(7, "msgpack"); - EXPECT_EQ(m->num, 7); - EXPECT_EQ(m->str, "msgpack"); -} - - -static void custom_finalizer_func(void* user) -{ - myclass* m = (myclass*)user; - delete m; -} - -TEST(zone, push_finalizer) -{ - msgpack::zone z; - myclass* m = new myclass(); - z.push_finalizer(custom_finalizer_func, (void*)m); -} - - -TEST(zone, push_finalizer_unique_ptr) -{ - msgpack::zone z; - msgpack::unique_ptr am(new myclass()); - z.push_finalizer(msgpack::move(am)); -} - - -TEST(zone, allocate_no_align) -{ - msgpack::zone z; - char* buf1 = (char*)z.allocate_no_align(4); - char* buf2 = (char*)z.allocate_no_align(4); - EXPECT_EQ(buf1+4, buf2); -} -