Hideaki Tai / msgpack-embedded

Dependents:   hello_message_pack

Committer:
hideakitai
Date:
Mon Feb 22 01:43:48 2016 +0000
Revision:
4:bd0c06dd6e92
Parent:
2:7e8f65896d8a
fix throw error

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hideakitai 0:3f9dbf1e2cb0 1 //
hideakitai 0:3f9dbf1e2cb0 2 // MessagePack for C++ static resolution routine
hideakitai 0:3f9dbf1e2cb0 3 //
hideakitai 0:3f9dbf1e2cb0 4 // Copyright (C) 2014-2015 KONDO Takatoshi
hideakitai 0:3f9dbf1e2cb0 5 //
hideakitai 0:3f9dbf1e2cb0 6 // Distributed under the Boost Software License, Version 1.0.
hideakitai 0:3f9dbf1e2cb0 7 // (See accompanying file LICENSE_1_0.txt or copy at
hideakitai 0:3f9dbf1e2cb0 8 // http://www.boost.org/LICENSE_1_0.txt)
hideakitai 0:3f9dbf1e2cb0 9 //
hideakitai 0:3f9dbf1e2cb0 10 #ifndef MSGPACK_TYPE_VECTOR_UNSIGNED_CHAR_HPP
hideakitai 0:3f9dbf1e2cb0 11 #define MSGPACK_TYPE_VECTOR_UNSIGNED_CHAR_HPP
hideakitai 0:3f9dbf1e2cb0 12
hideakitai 0:3f9dbf1e2cb0 13 #include "msgpack/versioning.hpp"
hideakitai 0:3f9dbf1e2cb0 14 #include "msgpack/adaptor/adaptor_base.hpp"
hideakitai 0:3f9dbf1e2cb0 15 #include "msgpack/adaptor/check_container_size.hpp"
hideakitai 0:3f9dbf1e2cb0 16
hideakitai 0:3f9dbf1e2cb0 17 #include <vector>
hideakitai 0:3f9dbf1e2cb0 18
hideakitai 0:3f9dbf1e2cb0 19 namespace msgpack {
hideakitai 0:3f9dbf1e2cb0 20
hideakitai 0:3f9dbf1e2cb0 21 /// @cond
hideakitai 0:3f9dbf1e2cb0 22 MSGPACK_API_VERSION_NAMESPACE(v1) {
hideakitai 0:3f9dbf1e2cb0 23 /// @endcond
hideakitai 0:3f9dbf1e2cb0 24
hideakitai 0:3f9dbf1e2cb0 25 namespace adaptor {
hideakitai 0:3f9dbf1e2cb0 26
hideakitai 0:3f9dbf1e2cb0 27 template <typename Alloc>
hideakitai 0:3f9dbf1e2cb0 28 struct convert<std::vector<unsigned char, Alloc> > {
hideakitai 0:3f9dbf1e2cb0 29 msgpack::object const& operator()(msgpack::object const& o, std::vector<unsigned char, Alloc>& v) const {
hideakitai 0:3f9dbf1e2cb0 30 switch (o.type) {
hideakitai 0:3f9dbf1e2cb0 31 case msgpack::type::BIN:
hideakitai 0:3f9dbf1e2cb0 32 v.resize(o.via.bin.size);
hideakitai 0:3f9dbf1e2cb0 33 std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size);
hideakitai 0:3f9dbf1e2cb0 34 break;
hideakitai 0:3f9dbf1e2cb0 35 case msgpack::type::STR:
hideakitai 0:3f9dbf1e2cb0 36 v.resize(o.via.str.size);
hideakitai 0:3f9dbf1e2cb0 37 std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size);
hideakitai 0:3f9dbf1e2cb0 38 break;
hideakitai 0:3f9dbf1e2cb0 39 default:
hideakitai 2:7e8f65896d8a 40 printf("throw msgpack::type_error()");
hideakitai 2:7e8f65896d8a 41 // throw msgpack::type_error();
hideakitai 0:3f9dbf1e2cb0 42 break;
hideakitai 0:3f9dbf1e2cb0 43 }
hideakitai 0:3f9dbf1e2cb0 44 return o;
hideakitai 0:3f9dbf1e2cb0 45 }
hideakitai 0:3f9dbf1e2cb0 46 };
hideakitai 0:3f9dbf1e2cb0 47
hideakitai 0:3f9dbf1e2cb0 48 template <typename Alloc>
hideakitai 0:3f9dbf1e2cb0 49 struct pack<std::vector<unsigned char, Alloc> > {
hideakitai 0:3f9dbf1e2cb0 50 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 51 msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::vector<unsigned char, Alloc>& v) const {
hideakitai 0:3f9dbf1e2cb0 52 uint32_t size = checked_get_container_size(v.size());
hideakitai 0:3f9dbf1e2cb0 53 o.pack_bin(size);
hideakitai 0:3f9dbf1e2cb0 54 o.pack_bin_body(reinterpret_cast<char const*>(&v.front()), size);
hideakitai 0:3f9dbf1e2cb0 55
hideakitai 0:3f9dbf1e2cb0 56 return o;
hideakitai 0:3f9dbf1e2cb0 57 }
hideakitai 0:3f9dbf1e2cb0 58 };
hideakitai 0:3f9dbf1e2cb0 59
hideakitai 0:3f9dbf1e2cb0 60 template <typename Alloc>
hideakitai 0:3f9dbf1e2cb0 61 struct object<std::vector<unsigned char, Alloc> > {
hideakitai 0:3f9dbf1e2cb0 62 void operator()(msgpack::object& o, const std::vector<unsigned char, Alloc>& v) const {
hideakitai 0:3f9dbf1e2cb0 63 uint32_t size = checked_get_container_size(v.size());
hideakitai 0:3f9dbf1e2cb0 64 o.type = msgpack::type::BIN;
hideakitai 0:3f9dbf1e2cb0 65 o.via.bin.ptr = reinterpret_cast<char const*>(&v.front());
hideakitai 0:3f9dbf1e2cb0 66 o.via.bin.size = size;
hideakitai 0:3f9dbf1e2cb0 67 }
hideakitai 0:3f9dbf1e2cb0 68 };
hideakitai 0:3f9dbf1e2cb0 69
hideakitai 0:3f9dbf1e2cb0 70 template <typename Alloc>
hideakitai 0:3f9dbf1e2cb0 71 struct object_with_zone<std::vector<unsigned char, Alloc> > {
hideakitai 0:3f9dbf1e2cb0 72 void operator()(msgpack::object::with_zone& o, const std::vector<unsigned char, Alloc>& v) const {
hideakitai 0:3f9dbf1e2cb0 73 uint32_t size = checked_get_container_size(v.size());
hideakitai 0:3f9dbf1e2cb0 74 o.type = msgpack::type::BIN;
hideakitai 0:3f9dbf1e2cb0 75 char* ptr = static_cast<char*>(o.zone.allocate_align(size));
hideakitai 0:3f9dbf1e2cb0 76 o.via.bin.ptr = ptr;
hideakitai 0:3f9dbf1e2cb0 77 o.via.bin.size = size;
hideakitai 0:3f9dbf1e2cb0 78 std::memcpy(ptr, &v.front(), size);
hideakitai 0:3f9dbf1e2cb0 79 }
hideakitai 0:3f9dbf1e2cb0 80 };
hideakitai 0:3f9dbf1e2cb0 81
hideakitai 0:3f9dbf1e2cb0 82 } // namespace adaptor
hideakitai 0:3f9dbf1e2cb0 83
hideakitai 0:3f9dbf1e2cb0 84 /// @cond
hideakitai 0:3f9dbf1e2cb0 85 } // MSGPACK_API_VERSION_NAMESPACE(v1)
hideakitai 0:3f9dbf1e2cb0 86 /// @endcond
hideakitai 0:3f9dbf1e2cb0 87
hideakitai 0:3f9dbf1e2cb0 88 } // namespace msgpack
hideakitai 0:3f9dbf1e2cb0 89
hideakitai 0:3f9dbf1e2cb0 90 #endif // MSGPACK_TYPE_VECTOR_UNSIGNED_CHAR_HPP