diff --git a/include/msgpack/adaptor/vector_bool.hpp b/include/msgpack/adaptor/vector_bool.hpp index 34950f09..db5b7e42 100644 --- a/include/msgpack/adaptor/vector_bool.hpp +++ b/include/msgpack/adaptor/vector_bool.hpp @@ -42,6 +42,37 @@ inline object const& operator>> (object const& o, std::vector& v) return o; } +template +inline packer& operator<< (packer& o, const std::vector& v) +{ + o.pack_array(v.size()); + for(std::vector::const_iterator it(v.begin()), it_end(v.end()); + it != it_end; ++it) { + o.pack(*it); + } + return o; +} + +inline void operator<< (object::with_zone& o, const std::vector& v) +{ + o.type = type::ARRAY; + if(v.empty()) { + o.via.array.ptr = nullptr; + o.via.array.size = 0; + } else { + 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(); + std::vector::const_iterator it(v.begin()); + do { + *p = object(*it, o.zone); + ++p; + ++it; + } while(p < pend); + } +} + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/vector_bool_fwd.hpp b/include/msgpack/adaptor/vector_bool_fwd.hpp index 8d477ed9..17433c25 100644 --- a/include/msgpack/adaptor/vector_bool_fwd.hpp +++ b/include/msgpack/adaptor/vector_bool_fwd.hpp @@ -28,6 +28,11 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { object const& operator>> (object const& o, std::vector& v); +template +packer& operator<< (packer& o, const std::vector& v); + +void operator<< (object::with_zone& o, const std::vector& v); + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack