Dependents:   hello_message_pack

msgpack-c & msgpack-c++ https://github.com/msgpack/msgpack-c implementation for embedded systems (mbed / Arduino)

Committer:
hideakitai
Date:
Mon Feb 22 01:43:48 2016 +0000
Revision:
4:bd0c06dd6e92
Parent:
0:3f9dbf1e2cb0
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++ serializing routine
hideakitai 0:3f9dbf1e2cb0 3 //
hideakitai 0:3f9dbf1e2cb0 4 // Copyright (C) 2008-2013 FURUHASHI Sadayuki and 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_PACK_HPP
hideakitai 0:3f9dbf1e2cb0 11 #define MSGPACK_PACK_HPP
hideakitai 0:3f9dbf1e2cb0 12
hideakitai 0:3f9dbf1e2cb0 13 #include "msgpack/versioning.hpp"
hideakitai 0:3f9dbf1e2cb0 14 #include "msgpack/cpp_config.hpp"
hideakitai 0:3f9dbf1e2cb0 15
hideakitai 0:3f9dbf1e2cb0 16 #include <stdexcept>
hideakitai 0:3f9dbf1e2cb0 17 #include <limits>
hideakitai 0:3f9dbf1e2cb0 18 #include <cstring>
hideakitai 0:3f9dbf1e2cb0 19 #include <climits>
hideakitai 0:3f9dbf1e2cb0 20
hideakitai 0:3f9dbf1e2cb0 21 #include "../sysdep.h"
hideakitai 0:3f9dbf1e2cb0 22
hideakitai 0:3f9dbf1e2cb0 23 namespace msgpack {
hideakitai 0:3f9dbf1e2cb0 24
hideakitai 0:3f9dbf1e2cb0 25 /// @cond
hideakitai 0:3f9dbf1e2cb0 26 MSGPACK_API_VERSION_NAMESPACE(v1) {
hideakitai 0:3f9dbf1e2cb0 27 /// @endcond
hideakitai 0:3f9dbf1e2cb0 28
hideakitai 0:3f9dbf1e2cb0 29 /// The class template that supports continuous packing.
hideakitai 0:3f9dbf1e2cb0 30 /**
hideakitai 0:3f9dbf1e2cb0 31 * @tparam Stream Any type that have a member function `Stream write(const char*, size_t s)`
hideakitai 0:3f9dbf1e2cb0 32 *
hideakitai 0:3f9dbf1e2cb0 33 */
hideakitai 0:3f9dbf1e2cb0 34 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 35 class packer {
hideakitai 0:3f9dbf1e2cb0 36 public:
hideakitai 0:3f9dbf1e2cb0 37 /// Constructor
hideakitai 0:3f9dbf1e2cb0 38 /**
hideakitai 0:3f9dbf1e2cb0 39 * This constructor is left for compatibility.
hideakitai 0:3f9dbf1e2cb0 40 * Use `packer(Stream* s)` instead of the constructor.
hideakitai 0:3f9dbf1e2cb0 41 *
hideakitai 0:3f9dbf1e2cb0 42 * @param s A pointer to packing destination stream object.
hideakitai 0:3f9dbf1e2cb0 43 */
hideakitai 0:3f9dbf1e2cb0 44 packer(Stream* s);
hideakitai 0:3f9dbf1e2cb0 45 /// Constructor
hideakitai 0:3f9dbf1e2cb0 46 /**
hideakitai 0:3f9dbf1e2cb0 47 * @param s Packing destination stream object.
hideakitai 0:3f9dbf1e2cb0 48 */
hideakitai 0:3f9dbf1e2cb0 49 packer(Stream& s);
hideakitai 0:3f9dbf1e2cb0 50
hideakitai 0:3f9dbf1e2cb0 51 public:
hideakitai 0:3f9dbf1e2cb0 52 /// Packing function template
hideakitai 0:3f9dbf1e2cb0 53 /**
hideakitai 0:3f9dbf1e2cb0 54 * @tparam T The type of packing object.
hideakitai 0:3f9dbf1e2cb0 55 *
hideakitai 0:3f9dbf1e2cb0 56 * @param v a packing object.
hideakitai 0:3f9dbf1e2cb0 57 *
hideakitai 0:3f9dbf1e2cb0 58 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 59 */
hideakitai 0:3f9dbf1e2cb0 60 template <typename T>
hideakitai 0:3f9dbf1e2cb0 61 packer<Stream>& pack(const T& v);
hideakitai 0:3f9dbf1e2cb0 62
hideakitai 0:3f9dbf1e2cb0 63 /// Packing uint8
hideakitai 0:3f9dbf1e2cb0 64 /**
hideakitai 0:3f9dbf1e2cb0 65 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 66 * The packed type is positive fixnum or uint8.
hideakitai 0:3f9dbf1e2cb0 67 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 68 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 69 *
hideakitai 0:3f9dbf1e2cb0 70 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 71 *
hideakitai 0:3f9dbf1e2cb0 72 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 73 */
hideakitai 0:3f9dbf1e2cb0 74 packer<Stream>& pack_uint8(uint8_t d);
hideakitai 0:3f9dbf1e2cb0 75
hideakitai 0:3f9dbf1e2cb0 76 /// Packing uint16
hideakitai 0:3f9dbf1e2cb0 77 /**
hideakitai 0:3f9dbf1e2cb0 78 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 79 * The packed type is positive fixnum, uint8 or uint16.
hideakitai 0:3f9dbf1e2cb0 80 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 81 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 82 *
hideakitai 0:3f9dbf1e2cb0 83 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 84 *
hideakitai 0:3f9dbf1e2cb0 85 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 86 */
hideakitai 0:3f9dbf1e2cb0 87 packer<Stream>& pack_uint16(uint16_t d);
hideakitai 0:3f9dbf1e2cb0 88
hideakitai 0:3f9dbf1e2cb0 89 /// Packing uint32
hideakitai 0:3f9dbf1e2cb0 90 /**
hideakitai 0:3f9dbf1e2cb0 91 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 92 * The packed type is positive fixnum, uint8, uint16 or uint32.
hideakitai 0:3f9dbf1e2cb0 93 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 94 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 95 *
hideakitai 0:3f9dbf1e2cb0 96 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 97 *
hideakitai 0:3f9dbf1e2cb0 98 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 99 */
hideakitai 0:3f9dbf1e2cb0 100 packer<Stream>& pack_uint32(uint32_t d);
hideakitai 0:3f9dbf1e2cb0 101
hideakitai 0:3f9dbf1e2cb0 102 /// Packing uint16
hideakitai 0:3f9dbf1e2cb0 103 /**
hideakitai 0:3f9dbf1e2cb0 104 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 105 * The packed type is positive fixnum, uint8, uint16, uint32 or uint64.
hideakitai 0:3f9dbf1e2cb0 106 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 107 * positive fixnum, uint8, uint16, or uint32 is used.
hideakitai 0:3f9dbf1e2cb0 108 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 109 *
hideakitai 0:3f9dbf1e2cb0 110 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 111 *
hideakitai 0:3f9dbf1e2cb0 112 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 113 */
hideakitai 0:3f9dbf1e2cb0 114 packer<Stream>& pack_uint64(uint64_t d);
hideakitai 0:3f9dbf1e2cb0 115
hideakitai 0:3f9dbf1e2cb0 116 /// Packing int8
hideakitai 0:3f9dbf1e2cb0 117 /**
hideakitai 0:3f9dbf1e2cb0 118 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 119 * If `d` is zero or positive, the packed type is positive fixnum, or uint8,
hideakitai 0:3f9dbf1e2cb0 120 * else the packed type is negative fixnum, or int8
hideakitai 0:3f9dbf1e2cb0 121 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 122 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 123 *
hideakitai 0:3f9dbf1e2cb0 124 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 125 *
hideakitai 0:3f9dbf1e2cb0 126 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 127 */
hideakitai 0:3f9dbf1e2cb0 128 packer<Stream>& pack_int8(int8_t d);
hideakitai 0:3f9dbf1e2cb0 129
hideakitai 0:3f9dbf1e2cb0 130 /// Packing int16
hideakitai 0:3f9dbf1e2cb0 131 /**
hideakitai 0:3f9dbf1e2cb0 132 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 133 * If `d` is zero or positive, the packed type is positive fixnum, uint8, or uint16,
hideakitai 0:3f9dbf1e2cb0 134 * else the packed type is negative fixnum, int8, or int16.
hideakitai 0:3f9dbf1e2cb0 135 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 136 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 137 *
hideakitai 0:3f9dbf1e2cb0 138 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 139 *
hideakitai 0:3f9dbf1e2cb0 140 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 141 */
hideakitai 0:3f9dbf1e2cb0 142 packer<Stream>& pack_int16(int16_t d);
hideakitai 0:3f9dbf1e2cb0 143
hideakitai 0:3f9dbf1e2cb0 144 /// Packing int32
hideakitai 0:3f9dbf1e2cb0 145 /**
hideakitai 0:3f9dbf1e2cb0 146 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 147 * If `d` is zero or positive, the packed type is positive fixnum, uint8, uint16, or uint32,
hideakitai 0:3f9dbf1e2cb0 148 * else the packed type is negative fixnum, int8, int16, or int32.
hideakitai 0:3f9dbf1e2cb0 149 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 150 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 151 *
hideakitai 0:3f9dbf1e2cb0 152 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 153 *
hideakitai 0:3f9dbf1e2cb0 154 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 155 */
hideakitai 0:3f9dbf1e2cb0 156 packer<Stream>& pack_int32(int32_t d);
hideakitai 0:3f9dbf1e2cb0 157
hideakitai 0:3f9dbf1e2cb0 158 /// Packing int32
hideakitai 0:3f9dbf1e2cb0 159 /**
hideakitai 0:3f9dbf1e2cb0 160 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 161 * If `d` is zero or positive, the packed type is positive fixnum, uint8, uint16, uint32, or uint64,
hideakitai 0:3f9dbf1e2cb0 162 * else the packed type is negative fixnum, int8, int16, int32, or int64.
hideakitai 0:3f9dbf1e2cb0 163 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 164 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 165 *
hideakitai 0:3f9dbf1e2cb0 166 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 167 *
hideakitai 0:3f9dbf1e2cb0 168 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 169 */
hideakitai 0:3f9dbf1e2cb0 170 packer<Stream>& pack_int64(int64_t d);
hideakitai 0:3f9dbf1e2cb0 171
hideakitai 0:3f9dbf1e2cb0 172
hideakitai 0:3f9dbf1e2cb0 173
hideakitai 0:3f9dbf1e2cb0 174 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 175 /**
hideakitai 0:3f9dbf1e2cb0 176 * The packed type is always uint8.
hideakitai 0:3f9dbf1e2cb0 177 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 178 *
hideakitai 0:3f9dbf1e2cb0 179 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 180 *
hideakitai 0:3f9dbf1e2cb0 181 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 182 */
hideakitai 0:3f9dbf1e2cb0 183 packer<Stream>& pack_fix_uint8(uint8_t d);
hideakitai 0:3f9dbf1e2cb0 184
hideakitai 0:3f9dbf1e2cb0 185 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 186 /**
hideakitai 0:3f9dbf1e2cb0 187 * The packed type is always uint16.
hideakitai 0:3f9dbf1e2cb0 188 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 189 *
hideakitai 0:3f9dbf1e2cb0 190 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 191 *
hideakitai 0:3f9dbf1e2cb0 192 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 193 */
hideakitai 0:3f9dbf1e2cb0 194 packer<Stream>& pack_fix_uint16(uint16_t d);
hideakitai 0:3f9dbf1e2cb0 195
hideakitai 0:3f9dbf1e2cb0 196 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 197 /**
hideakitai 0:3f9dbf1e2cb0 198 * The packed type is always uint32.
hideakitai 0:3f9dbf1e2cb0 199 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 200 *
hideakitai 0:3f9dbf1e2cb0 201 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 202 *
hideakitai 0:3f9dbf1e2cb0 203 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 204 */
hideakitai 0:3f9dbf1e2cb0 205 packer<Stream>& pack_fix_uint32(uint32_t d);
hideakitai 0:3f9dbf1e2cb0 206
hideakitai 0:3f9dbf1e2cb0 207 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 208 /**
hideakitai 0:3f9dbf1e2cb0 209 * The packed type is always uint64.
hideakitai 0:3f9dbf1e2cb0 210 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 211 *
hideakitai 0:3f9dbf1e2cb0 212 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 213 *
hideakitai 0:3f9dbf1e2cb0 214 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 215 */
hideakitai 0:3f9dbf1e2cb0 216 packer<Stream>& pack_fix_uint64(uint64_t d);
hideakitai 0:3f9dbf1e2cb0 217
hideakitai 0:3f9dbf1e2cb0 218 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 219 /**
hideakitai 0:3f9dbf1e2cb0 220 * The packed type is always int8.
hideakitai 0:3f9dbf1e2cb0 221 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 222 *
hideakitai 0:3f9dbf1e2cb0 223 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 224 *
hideakitai 0:3f9dbf1e2cb0 225 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 226 */
hideakitai 0:3f9dbf1e2cb0 227 packer<Stream>& pack_fix_int8(int8_t d);
hideakitai 0:3f9dbf1e2cb0 228
hideakitai 0:3f9dbf1e2cb0 229 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 230 /**
hideakitai 0:3f9dbf1e2cb0 231 * The packed type is always int16.
hideakitai 0:3f9dbf1e2cb0 232 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 233 *
hideakitai 0:3f9dbf1e2cb0 234 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 235 *
hideakitai 0:3f9dbf1e2cb0 236 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 237 */
hideakitai 0:3f9dbf1e2cb0 238 packer<Stream>& pack_fix_int16(int16_t d);
hideakitai 0:3f9dbf1e2cb0 239
hideakitai 0:3f9dbf1e2cb0 240 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 241 /**
hideakitai 0:3f9dbf1e2cb0 242 * The packed type is always int32.
hideakitai 0:3f9dbf1e2cb0 243 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 244 *
hideakitai 0:3f9dbf1e2cb0 245 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 246 *
hideakitai 0:3f9dbf1e2cb0 247 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 248 */
hideakitai 0:3f9dbf1e2cb0 249 packer<Stream>& pack_fix_int32(int32_t d);
hideakitai 0:3f9dbf1e2cb0 250
hideakitai 0:3f9dbf1e2cb0 251 /// Packing uint8 (fixed packed type).
hideakitai 0:3f9dbf1e2cb0 252 /**
hideakitai 0:3f9dbf1e2cb0 253 * The packed type is always int64.
hideakitai 0:3f9dbf1e2cb0 254 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 255 *
hideakitai 0:3f9dbf1e2cb0 256 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 257 *
hideakitai 0:3f9dbf1e2cb0 258 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 259 */
hideakitai 0:3f9dbf1e2cb0 260 packer<Stream>& pack_fix_int64(int64_t d);
hideakitai 0:3f9dbf1e2cb0 261
hideakitai 0:3f9dbf1e2cb0 262
hideakitai 0:3f9dbf1e2cb0 263 /// Packing char
hideakitai 0:3f9dbf1e2cb0 264 /**
hideakitai 0:3f9dbf1e2cb0 265 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 266 * If `d` is zero or positive, the packed type is positive fixnum, or uint*,
hideakitai 0:3f9dbf1e2cb0 267 * else the packed type is negative fixnum, or int*
hideakitai 0:3f9dbf1e2cb0 268 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 269 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 270 *
hideakitai 0:3f9dbf1e2cb0 271 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 272 *
hideakitai 0:3f9dbf1e2cb0 273 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 274 */
hideakitai 0:3f9dbf1e2cb0 275 packer<Stream>& pack_char(char d);
hideakitai 0:3f9dbf1e2cb0 276
hideakitai 0:3f9dbf1e2cb0 277 /// Packing signed char
hideakitai 0:3f9dbf1e2cb0 278 /**
hideakitai 0:3f9dbf1e2cb0 279 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 280 * If `d` is zero or positive, the packed type is positive fixnum, or uint*,
hideakitai 0:3f9dbf1e2cb0 281 * else the packed type is negative fixnum, or int*
hideakitai 0:3f9dbf1e2cb0 282 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 283 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 284 *
hideakitai 0:3f9dbf1e2cb0 285 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 286 *
hideakitai 0:3f9dbf1e2cb0 287 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 288 */
hideakitai 0:3f9dbf1e2cb0 289 packer<Stream>& pack_signed_char(signed char d);
hideakitai 0:3f9dbf1e2cb0 290
hideakitai 0:3f9dbf1e2cb0 291 /// Packing short
hideakitai 0:3f9dbf1e2cb0 292 /**
hideakitai 0:3f9dbf1e2cb0 293 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 294 * If `d` is zero or positive, the packed type is positive fixnum, or uint*,
hideakitai 0:3f9dbf1e2cb0 295 * else the packed type is negative fixnum, or int*
hideakitai 0:3f9dbf1e2cb0 296 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 297 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 298 *
hideakitai 0:3f9dbf1e2cb0 299 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 300 *
hideakitai 0:3f9dbf1e2cb0 301 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 302 */
hideakitai 0:3f9dbf1e2cb0 303 packer<Stream>& pack_short(short d);
hideakitai 0:3f9dbf1e2cb0 304
hideakitai 0:3f9dbf1e2cb0 305 /// Packing int
hideakitai 0:3f9dbf1e2cb0 306 /**
hideakitai 0:3f9dbf1e2cb0 307 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 308 * If `d` is zero or positive, the packed type is positive fixnum, or uint*,
hideakitai 0:3f9dbf1e2cb0 309 * else the packed type is negative fixnum, or int*
hideakitai 0:3f9dbf1e2cb0 310 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 311 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 312 *
hideakitai 0:3f9dbf1e2cb0 313 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 314 *
hideakitai 0:3f9dbf1e2cb0 315 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 316 */
hideakitai 0:3f9dbf1e2cb0 317 packer<Stream>& pack_int(int d);
hideakitai 0:3f9dbf1e2cb0 318
hideakitai 0:3f9dbf1e2cb0 319 /// Packing long
hideakitai 0:3f9dbf1e2cb0 320 /**
hideakitai 0:3f9dbf1e2cb0 321 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 322 * If `d` is zero or positive, the packed type is positive fixnum, or uint*,
hideakitai 0:3f9dbf1e2cb0 323 * else the packed type is negative fixnum, or int*
hideakitai 0:3f9dbf1e2cb0 324 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 325 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 326 *
hideakitai 0:3f9dbf1e2cb0 327 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 328 *
hideakitai 0:3f9dbf1e2cb0 329 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 330 */
hideakitai 0:3f9dbf1e2cb0 331 packer<Stream>& pack_long(long d);
hideakitai 0:3f9dbf1e2cb0 332
hideakitai 0:3f9dbf1e2cb0 333 /// Packing long long
hideakitai 0:3f9dbf1e2cb0 334 /**
hideakitai 0:3f9dbf1e2cb0 335 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 336 * If `d` is zero or positive, the packed type is positive fixnum, or uint*,
hideakitai 0:3f9dbf1e2cb0 337 * else the packed type is negative fixnum, or int*
hideakitai 0:3f9dbf1e2cb0 338 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 339 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 340 *
hideakitai 0:3f9dbf1e2cb0 341 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 342 *
hideakitai 0:3f9dbf1e2cb0 343 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 344 */
hideakitai 0:3f9dbf1e2cb0 345 packer<Stream>& pack_long_long(long long d);
hideakitai 0:3f9dbf1e2cb0 346
hideakitai 0:3f9dbf1e2cb0 347
hideakitai 0:3f9dbf1e2cb0 348 /// Packing unsigned char
hideakitai 0:3f9dbf1e2cb0 349 /**
hideakitai 0:3f9dbf1e2cb0 350 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 351 * The packed type is positive fixnum, or uint*.
hideakitai 0:3f9dbf1e2cb0 352 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 353 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 354 *
hideakitai 0:3f9dbf1e2cb0 355 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 356 *
hideakitai 0:3f9dbf1e2cb0 357 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 358 */
hideakitai 0:3f9dbf1e2cb0 359 packer<Stream>& pack_unsigned_char(unsigned char d);
hideakitai 0:3f9dbf1e2cb0 360
hideakitai 0:3f9dbf1e2cb0 361 /// Packing unsigned short
hideakitai 0:3f9dbf1e2cb0 362 /**
hideakitai 0:3f9dbf1e2cb0 363 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 364 * The packed type is positive fixnum, or uint*.
hideakitai 0:3f9dbf1e2cb0 365 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 366 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 367 *
hideakitai 0:3f9dbf1e2cb0 368 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 369 *
hideakitai 0:3f9dbf1e2cb0 370 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 371 */
hideakitai 0:3f9dbf1e2cb0 372 packer<Stream>& pack_unsigned_short(unsigned short d);
hideakitai 0:3f9dbf1e2cb0 373
hideakitai 0:3f9dbf1e2cb0 374 /// Packing unsigned int
hideakitai 0:3f9dbf1e2cb0 375 /**
hideakitai 0:3f9dbf1e2cb0 376 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 377 * The packed type is positive fixnum, or uint*.
hideakitai 0:3f9dbf1e2cb0 378 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 379 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 380 *
hideakitai 0:3f9dbf1e2cb0 381 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 382 *
hideakitai 0:3f9dbf1e2cb0 383 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 384 */
hideakitai 0:3f9dbf1e2cb0 385 packer<Stream>& pack_unsigned_int(unsigned int d);
hideakitai 0:3f9dbf1e2cb0 386
hideakitai 0:3f9dbf1e2cb0 387 /// Packing unsigned long
hideakitai 0:3f9dbf1e2cb0 388 /**
hideakitai 0:3f9dbf1e2cb0 389 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 390 * The packed type is positive fixnum, or uint*.
hideakitai 0:3f9dbf1e2cb0 391 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 392 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 393 *
hideakitai 0:3f9dbf1e2cb0 394 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 395 *
hideakitai 0:3f9dbf1e2cb0 396 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 397 */
hideakitai 0:3f9dbf1e2cb0 398 packer<Stream>& pack_unsigned_long(unsigned long d);
hideakitai 0:3f9dbf1e2cb0 399
hideakitai 0:3f9dbf1e2cb0 400 /// Packing unsigned long long
hideakitai 0:3f9dbf1e2cb0 401 /**
hideakitai 0:3f9dbf1e2cb0 402 * The byte size of the packed data depends on `d`.
hideakitai 0:3f9dbf1e2cb0 403 * The packed type is positive fixnum, or uint*.
hideakitai 0:3f9dbf1e2cb0 404 * The minimum byte size expression is used.
hideakitai 0:3f9dbf1e2cb0 405 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-int
hideakitai 0:3f9dbf1e2cb0 406 *
hideakitai 0:3f9dbf1e2cb0 407 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 408 *
hideakitai 0:3f9dbf1e2cb0 409 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 410 */
hideakitai 0:3f9dbf1e2cb0 411 packer<Stream>& pack_unsigned_long_long(unsigned long long d);
hideakitai 0:3f9dbf1e2cb0 412
hideakitai 0:3f9dbf1e2cb0 413 /// Packing float
hideakitai 0:3f9dbf1e2cb0 414 /**
hideakitai 0:3f9dbf1e2cb0 415 * The packed type is float32.
hideakitai 0:3f9dbf1e2cb0 416 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-float
hideakitai 0:3f9dbf1e2cb0 417 *
hideakitai 0:3f9dbf1e2cb0 418 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 419 *
hideakitai 0:3f9dbf1e2cb0 420 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 421 */
hideakitai 0:3f9dbf1e2cb0 422 packer<Stream>& pack_float(float d);
hideakitai 0:3f9dbf1e2cb0 423
hideakitai 0:3f9dbf1e2cb0 424 /// Packing double
hideakitai 0:3f9dbf1e2cb0 425 /**
hideakitai 0:3f9dbf1e2cb0 426 * The packed type is float64.
hideakitai 0:3f9dbf1e2cb0 427 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-float
hideakitai 0:3f9dbf1e2cb0 428 *
hideakitai 0:3f9dbf1e2cb0 429 * @param d a packing object.
hideakitai 0:3f9dbf1e2cb0 430 *
hideakitai 0:3f9dbf1e2cb0 431 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 432 */
hideakitai 0:3f9dbf1e2cb0 433 packer<Stream>& pack_double(double d);
hideakitai 0:3f9dbf1e2cb0 434
hideakitai 0:3f9dbf1e2cb0 435
hideakitai 0:3f9dbf1e2cb0 436 /// Packing nil
hideakitai 0:3f9dbf1e2cb0 437 /**
hideakitai 0:3f9dbf1e2cb0 438 * The packed type is nil.
hideakitai 0:3f9dbf1e2cb0 439 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-nil
hideakitai 0:3f9dbf1e2cb0 440 *
hideakitai 0:3f9dbf1e2cb0 441 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 442 */
hideakitai 0:3f9dbf1e2cb0 443 packer<Stream>& pack_nil();
hideakitai 0:3f9dbf1e2cb0 444
hideakitai 0:3f9dbf1e2cb0 445 /// Packing true
hideakitai 0:3f9dbf1e2cb0 446 /**
hideakitai 0:3f9dbf1e2cb0 447 * The packed type is bool, value is true.
hideakitai 0:3f9dbf1e2cb0 448 * See https://github.com/msgpack/msgpack/blob/master/spec.md#bool-format-family
hideakitai 0:3f9dbf1e2cb0 449 *
hideakitai 0:3f9dbf1e2cb0 450 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 451 */
hideakitai 0:3f9dbf1e2cb0 452 packer<Stream>& pack_true();
hideakitai 0:3f9dbf1e2cb0 453
hideakitai 0:3f9dbf1e2cb0 454 /// Packing false
hideakitai 0:3f9dbf1e2cb0 455 /**
hideakitai 0:3f9dbf1e2cb0 456 * The packed type is bool, value is false.
hideakitai 0:3f9dbf1e2cb0 457 * See https://github.com/msgpack/msgpack/blob/master/spec.md#bool-format-family
hideakitai 0:3f9dbf1e2cb0 458 *
hideakitai 0:3f9dbf1e2cb0 459 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 460 */
hideakitai 0:3f9dbf1e2cb0 461 packer<Stream>& pack_false();
hideakitai 0:3f9dbf1e2cb0 462
hideakitai 0:3f9dbf1e2cb0 463 /// Packing array header and size
hideakitai 0:3f9dbf1e2cb0 464 /**
hideakitai 0:3f9dbf1e2cb0 465 * The packed type is array header and array size.
hideakitai 0:3f9dbf1e2cb0 466 * You need to pack `n` msgpack objects following this header and size.
hideakitai 0:3f9dbf1e2cb0 467 * See https://github.com/msgpack/msgpack/blob/master/spec.md#array-format-family
hideakitai 0:3f9dbf1e2cb0 468 *
hideakitai 0:3f9dbf1e2cb0 469 * @param n The number of array elements (array size).
hideakitai 0:3f9dbf1e2cb0 470 *
hideakitai 0:3f9dbf1e2cb0 471 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 472 */
hideakitai 0:3f9dbf1e2cb0 473 packer<Stream>& pack_array(uint32_t n);
hideakitai 0:3f9dbf1e2cb0 474
hideakitai 0:3f9dbf1e2cb0 475 /// Packing map header and size
hideakitai 0:3f9dbf1e2cb0 476 /**
hideakitai 0:3f9dbf1e2cb0 477 * The packed type is map header and map size.
hideakitai 0:3f9dbf1e2cb0 478 * You need to pack `n` pairs of msgpack objects following this header and size.
hideakitai 0:3f9dbf1e2cb0 479 * See https://github.com/msgpack/msgpack/blob/master/spec.md#map-format-family
hideakitai 0:3f9dbf1e2cb0 480 *
hideakitai 0:3f9dbf1e2cb0 481 * @param n The number of array elements (array size).
hideakitai 0:3f9dbf1e2cb0 482 *
hideakitai 0:3f9dbf1e2cb0 483 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 484 */
hideakitai 0:3f9dbf1e2cb0 485 packer<Stream>& pack_map(uint32_t n);
hideakitai 0:3f9dbf1e2cb0 486
hideakitai 0:3f9dbf1e2cb0 487
hideakitai 0:3f9dbf1e2cb0 488 /// Packing str header and length
hideakitai 0:3f9dbf1e2cb0 489 /**
hideakitai 0:3f9dbf1e2cb0 490 * The packed type is str header and length.
hideakitai 0:3f9dbf1e2cb0 491 * The minimum byte size length expression is used.
hideakitai 0:3f9dbf1e2cb0 492 * You need to call `pack_str_body(const char* b, uint32_t l)` after this function calling with the same `l` value.
hideakitai 0:3f9dbf1e2cb0 493 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-str
hideakitai 0:3f9dbf1e2cb0 494 *
hideakitai 0:3f9dbf1e2cb0 495 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 496 *
hideakitai 0:3f9dbf1e2cb0 497 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 498 */
hideakitai 0:3f9dbf1e2cb0 499 packer<Stream>& pack_str(uint32_t l);
hideakitai 0:3f9dbf1e2cb0 500
hideakitai 0:3f9dbf1e2cb0 501 /// Packing str body
hideakitai 0:3f9dbf1e2cb0 502 /**
hideakitai 0:3f9dbf1e2cb0 503 * You need to call this function just after `pack_str(uint32_t l)` calling.
hideakitai 0:3f9dbf1e2cb0 504 * The value `l` should be the same as `pack_str(uint32_t l)` argument `l`.
hideakitai 0:3f9dbf1e2cb0 505 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-str
hideakitai 0:3f9dbf1e2cb0 506 *
hideakitai 0:3f9dbf1e2cb0 507 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 508 *
hideakitai 0:3f9dbf1e2cb0 509 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 510 */
hideakitai 0:3f9dbf1e2cb0 511 packer<Stream>& pack_str_body(const char* b, uint32_t l);
hideakitai 0:3f9dbf1e2cb0 512
hideakitai 0:3f9dbf1e2cb0 513 /// Packing raw (v4) header and length
hideakitai 0:3f9dbf1e2cb0 514 /**
hideakitai 0:3f9dbf1e2cb0 515 * The packed type is raw header and length.
hideakitai 0:3f9dbf1e2cb0 516 * The minimum byte size length expression is used.
hideakitai 0:3f9dbf1e2cb0 517 * The format raw (v4) is old MessagePack version4 format.
hideakitai 0:3f9dbf1e2cb0 518 * You need to call `pack_v4raw_body(const char* b, uint32_t l)` after this function calling with the same `l` value.
hideakitai 0:3f9dbf1e2cb0 519 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-str
hideakitai 0:3f9dbf1e2cb0 520 *
hideakitai 0:3f9dbf1e2cb0 521 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 522 *
hideakitai 0:3f9dbf1e2cb0 523 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 524 */
hideakitai 0:3f9dbf1e2cb0 525 packer<Stream>& pack_v4raw(uint32_t l);
hideakitai 0:3f9dbf1e2cb0 526
hideakitai 0:3f9dbf1e2cb0 527 /// Packing raw (v4) body
hideakitai 0:3f9dbf1e2cb0 528 /**
hideakitai 0:3f9dbf1e2cb0 529 * The format raw (v4) is old MessagePack version4 format.
hideakitai 0:3f9dbf1e2cb0 530 * You need to call this function just after `pack_v4raw(uint32_t l)` calling.
hideakitai 0:3f9dbf1e2cb0 531 * The value `l` should be the same as `pack_v4raw(uint32_t l)` argument `l`.
hideakitai 0:3f9dbf1e2cb0 532 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-str
hideakitai 0:3f9dbf1e2cb0 533 *
hideakitai 0:3f9dbf1e2cb0 534 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 535 *
hideakitai 0:3f9dbf1e2cb0 536 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 537 */
hideakitai 0:3f9dbf1e2cb0 538 packer<Stream>& pack_v4raw_body(const char* b, uint32_t l);
hideakitai 0:3f9dbf1e2cb0 539
hideakitai 0:3f9dbf1e2cb0 540 /// Packing bin header and length
hideakitai 0:3f9dbf1e2cb0 541 /**
hideakitai 0:3f9dbf1e2cb0 542 * The packed type is bin header and length.
hideakitai 0:3f9dbf1e2cb0 543 * The minimum byte size length expression is used.
hideakitai 0:3f9dbf1e2cb0 544 * You need to call `pack_bin_body(const char* b, uint32_t l)` after this function calling with the same `l` value.
hideakitai 0:3f9dbf1e2cb0 545 * See https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family
hideakitai 0:3f9dbf1e2cb0 546 *
hideakitai 0:3f9dbf1e2cb0 547 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 548 *
hideakitai 0:3f9dbf1e2cb0 549 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 550 */
hideakitai 0:3f9dbf1e2cb0 551 packer<Stream>& pack_bin(uint32_t l);
hideakitai 0:3f9dbf1e2cb0 552
hideakitai 0:3f9dbf1e2cb0 553 /// Packing bin body
hideakitai 0:3f9dbf1e2cb0 554 /**
hideakitai 0:3f9dbf1e2cb0 555 * You need to call this function just after `pack_bin(uint32_t l)` calling.
hideakitai 0:3f9dbf1e2cb0 556 * The value `l` should be the same as `pack_bin(uint32_t l)` argument `l`.
hideakitai 0:3f9dbf1e2cb0 557 * See https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family
hideakitai 0:3f9dbf1e2cb0 558 *
hideakitai 0:3f9dbf1e2cb0 559 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 560 *
hideakitai 0:3f9dbf1e2cb0 561 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 562 */
hideakitai 0:3f9dbf1e2cb0 563 packer<Stream>& pack_bin_body(const char* b, uint32_t l);
hideakitai 0:3f9dbf1e2cb0 564
hideakitai 0:3f9dbf1e2cb0 565 /// Packing ext header, type, and length
hideakitai 0:3f9dbf1e2cb0 566 /**
hideakitai 0:3f9dbf1e2cb0 567 * The packed type is ext.
hideakitai 0:3f9dbf1e2cb0 568 * The minimum byte size length expression is used.
hideakitai 0:3f9dbf1e2cb0 569 * The length 1, 2, 4, 8, and 16 can be encoded in the header.
hideakitai 0:3f9dbf1e2cb0 570 * You need to call `pack_ext_body(const char* b, uint32_t l)` after this function calling with the same `l` value.
hideakitai 0:3f9dbf1e2cb0 571 * See https://github.com/msgpack/msgpack/blob/master/spec.md#formats-ext
hideakitai 0:3f9dbf1e2cb0 572 *
hideakitai 0:3f9dbf1e2cb0 573 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 574 *
hideakitai 0:3f9dbf1e2cb0 575 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 576 */
hideakitai 0:3f9dbf1e2cb0 577 packer<Stream>& pack_ext(size_t l, int8_t type);
hideakitai 0:3f9dbf1e2cb0 578
hideakitai 0:3f9dbf1e2cb0 579 /// Packing ext body
hideakitai 0:3f9dbf1e2cb0 580 /**
hideakitai 0:3f9dbf1e2cb0 581 * You need to call this function just after `pack_ext(size_t l, int8_t type)` calling.
hideakitai 0:3f9dbf1e2cb0 582 * The value `l` should be the same as `pack_ext(size_t l, int8_t type)` argument `l`.
hideakitai 0:3f9dbf1e2cb0 583 * See https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family
hideakitai 0:3f9dbf1e2cb0 584 *
hideakitai 0:3f9dbf1e2cb0 585 * @param l The length of string.
hideakitai 0:3f9dbf1e2cb0 586 *
hideakitai 0:3f9dbf1e2cb0 587 * @return The reference of `*this`.
hideakitai 0:3f9dbf1e2cb0 588 */
hideakitai 0:3f9dbf1e2cb0 589 packer<Stream>& pack_ext_body(const char* b, uint32_t l);
hideakitai 0:3f9dbf1e2cb0 590
hideakitai 0:3f9dbf1e2cb0 591 private:
hideakitai 0:3f9dbf1e2cb0 592 template <typename T>
hideakitai 0:3f9dbf1e2cb0 593 void pack_imp_uint8(T d);
hideakitai 0:3f9dbf1e2cb0 594 template <typename T>
hideakitai 0:3f9dbf1e2cb0 595 void pack_imp_uint16(T d);
hideakitai 0:3f9dbf1e2cb0 596 template <typename T>
hideakitai 0:3f9dbf1e2cb0 597 void pack_imp_uint32(T d);
hideakitai 0:3f9dbf1e2cb0 598 template <typename T>
hideakitai 0:3f9dbf1e2cb0 599 void pack_imp_uint64(T d);
hideakitai 0:3f9dbf1e2cb0 600 template <typename T>
hideakitai 0:3f9dbf1e2cb0 601 void pack_imp_int8(T d);
hideakitai 0:3f9dbf1e2cb0 602 template <typename T>
hideakitai 0:3f9dbf1e2cb0 603 void pack_imp_int16(T d);
hideakitai 0:3f9dbf1e2cb0 604 template <typename T>
hideakitai 0:3f9dbf1e2cb0 605 void pack_imp_int32(T d);
hideakitai 0:3f9dbf1e2cb0 606 template <typename T>
hideakitai 0:3f9dbf1e2cb0 607 void pack_imp_int64(T d);
hideakitai 0:3f9dbf1e2cb0 608
hideakitai 0:3f9dbf1e2cb0 609 void append_buffer(const char* buf, size_t len)
hideakitai 0:3f9dbf1e2cb0 610 { m_stream.write(buf, len); }
hideakitai 0:3f9dbf1e2cb0 611
hideakitai 0:3f9dbf1e2cb0 612 private:
hideakitai 0:3f9dbf1e2cb0 613 Stream& m_stream;
hideakitai 0:3f9dbf1e2cb0 614
hideakitai 0:3f9dbf1e2cb0 615 #if defined(MSGPACK_USE_CPP03)
hideakitai 0:3f9dbf1e2cb0 616 private:
hideakitai 0:3f9dbf1e2cb0 617 packer(const packer&);
hideakitai 0:3f9dbf1e2cb0 618 packer& operator=(const packer&);
hideakitai 0:3f9dbf1e2cb0 619 packer();
hideakitai 0:3f9dbf1e2cb0 620 #else // defined(MSGPACK_USE_CPP03)
hideakitai 0:3f9dbf1e2cb0 621 public:
hideakitai 0:3f9dbf1e2cb0 622 packer(const packer&) = delete;
hideakitai 0:3f9dbf1e2cb0 623 packer& operator=(const packer&) = delete;
hideakitai 0:3f9dbf1e2cb0 624 packer() = delete;
hideakitai 0:3f9dbf1e2cb0 625 #endif // defined(MSGPACK_USE_CPP03)
hideakitai 0:3f9dbf1e2cb0 626 };
hideakitai 0:3f9dbf1e2cb0 627
hideakitai 0:3f9dbf1e2cb0 628
hideakitai 0:3f9dbf1e2cb0 629 /// Pack the value as MessagePack format into the stream
hideakitai 0:3f9dbf1e2cb0 630 /**
hideakitai 0:3f9dbf1e2cb0 631 * This function template is left for compatibility.
hideakitai 0:3f9dbf1e2cb0 632 * Use `void pack(Stream& s, const T& v)` instead of the function template.
hideakitai 0:3f9dbf1e2cb0 633 *
hideakitai 0:3f9dbf1e2cb0 634 * @tparam Stream Any type that have a member function `Stream write(const char*, size_t s)`
hideakitai 0:3f9dbf1e2cb0 635 * @tparam T Any type that is adapted to MessagePack
hideakitai 0:3f9dbf1e2cb0 636 * @param s The pointer to packing destination stream
hideakitai 0:3f9dbf1e2cb0 637 * @param v Packing value
hideakitai 0:3f9dbf1e2cb0 638 */
hideakitai 0:3f9dbf1e2cb0 639 template <typename Stream, typename T>
hideakitai 0:3f9dbf1e2cb0 640 inline void pack(Stream* s, const T& v)
hideakitai 0:3f9dbf1e2cb0 641 {
hideakitai 0:3f9dbf1e2cb0 642 packer<Stream>(*s).pack(v);
hideakitai 0:3f9dbf1e2cb0 643 }
hideakitai 0:3f9dbf1e2cb0 644
hideakitai 0:3f9dbf1e2cb0 645 /// Pack the value as MessagePack format into the stream
hideakitai 0:3f9dbf1e2cb0 646 /**
hideakitai 0:3f9dbf1e2cb0 647 * @tparam Stream Any type that have a member function `Stream write(const char*, size_t s)`
hideakitai 0:3f9dbf1e2cb0 648 * @tparam T Any type that is adapted to MessagePack
hideakitai 0:3f9dbf1e2cb0 649 * @param s Packing destination stream
hideakitai 0:3f9dbf1e2cb0 650 * @param v Packing value
hideakitai 0:3f9dbf1e2cb0 651 */
hideakitai 0:3f9dbf1e2cb0 652 template <typename Stream, typename T>
hideakitai 0:3f9dbf1e2cb0 653 inline void pack(Stream& s, const T& v)
hideakitai 0:3f9dbf1e2cb0 654 {
hideakitai 0:3f9dbf1e2cb0 655 packer<Stream>(s).pack(v);
hideakitai 0:3f9dbf1e2cb0 656 }
hideakitai 0:3f9dbf1e2cb0 657
hideakitai 0:3f9dbf1e2cb0 658
hideakitai 0:3f9dbf1e2cb0 659 #if MSGPACK_ENDIAN_LITTLE_BYTE
hideakitai 0:3f9dbf1e2cb0 660 template <typename T>
hideakitai 0:3f9dbf1e2cb0 661 inline char take8_8(T d) {
hideakitai 0:3f9dbf1e2cb0 662 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[0]);
hideakitai 0:3f9dbf1e2cb0 663 }
hideakitai 0:3f9dbf1e2cb0 664 template <typename T>
hideakitai 0:3f9dbf1e2cb0 665 inline char take8_16(T d) {
hideakitai 0:3f9dbf1e2cb0 666 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[0]);
hideakitai 0:3f9dbf1e2cb0 667 }
hideakitai 0:3f9dbf1e2cb0 668 template <typename T>
hideakitai 0:3f9dbf1e2cb0 669 inline char take8_32(T d) {
hideakitai 0:3f9dbf1e2cb0 670 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[0]);
hideakitai 0:3f9dbf1e2cb0 671 }
hideakitai 0:3f9dbf1e2cb0 672 template <typename T>
hideakitai 0:3f9dbf1e2cb0 673 inline char take8_64(T d) {
hideakitai 0:3f9dbf1e2cb0 674 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[0]);
hideakitai 0:3f9dbf1e2cb0 675 }
hideakitai 0:3f9dbf1e2cb0 676
hideakitai 0:3f9dbf1e2cb0 677 #elif MSGPACK_ENDIAN_BIG_BYTE
hideakitai 0:3f9dbf1e2cb0 678
hideakitai 0:3f9dbf1e2cb0 679 template <typename T>
hideakitai 0:3f9dbf1e2cb0 680 inline char take8_8(T d) {
hideakitai 0:3f9dbf1e2cb0 681 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[0]);
hideakitai 0:3f9dbf1e2cb0 682 }
hideakitai 0:3f9dbf1e2cb0 683 template <typename T>
hideakitai 0:3f9dbf1e2cb0 684 inline char take8_16(T d) {
hideakitai 0:3f9dbf1e2cb0 685 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[1]);
hideakitai 0:3f9dbf1e2cb0 686 }
hideakitai 0:3f9dbf1e2cb0 687 template <typename T>
hideakitai 0:3f9dbf1e2cb0 688 inline char take8_32(T d) {
hideakitai 0:3f9dbf1e2cb0 689 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[3]);
hideakitai 0:3f9dbf1e2cb0 690 }
hideakitai 0:3f9dbf1e2cb0 691 template <typename T>
hideakitai 0:3f9dbf1e2cb0 692 inline char take8_64(T d) {
hideakitai 0:3f9dbf1e2cb0 693 return static_cast<char>(reinterpret_cast<uint8_t*>(&d)[7]);
hideakitai 0:3f9dbf1e2cb0 694 }
hideakitai 0:3f9dbf1e2cb0 695
hideakitai 0:3f9dbf1e2cb0 696 #else
hideakitai 0:3f9dbf1e2cb0 697 #error msgpack-c supports only big endian and little endian
hideakitai 0:3f9dbf1e2cb0 698 #endif
hideakitai 0:3f9dbf1e2cb0 699
hideakitai 0:3f9dbf1e2cb0 700 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 701 inline packer<Stream>::packer(Stream* s) : m_stream(*s) { }
hideakitai 0:3f9dbf1e2cb0 702
hideakitai 0:3f9dbf1e2cb0 703 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 704 inline packer<Stream>::packer(Stream& s) : m_stream(s) { }
hideakitai 0:3f9dbf1e2cb0 705
hideakitai 0:3f9dbf1e2cb0 706
hideakitai 0:3f9dbf1e2cb0 707 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 708 inline packer<Stream>& packer<Stream>::pack_uint8(uint8_t d)
hideakitai 0:3f9dbf1e2cb0 709 { pack_imp_uint8(d); return *this; }
hideakitai 0:3f9dbf1e2cb0 710
hideakitai 0:3f9dbf1e2cb0 711 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 712 inline packer<Stream>& packer<Stream>::pack_uint16(uint16_t d)
hideakitai 0:3f9dbf1e2cb0 713 { pack_imp_uint16(d); return *this; }
hideakitai 0:3f9dbf1e2cb0 714
hideakitai 0:3f9dbf1e2cb0 715 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 716 inline packer<Stream>& packer<Stream>::pack_uint32(uint32_t d)
hideakitai 0:3f9dbf1e2cb0 717 { pack_imp_uint32(d); return *this; }
hideakitai 0:3f9dbf1e2cb0 718
hideakitai 0:3f9dbf1e2cb0 719 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 720 inline packer<Stream>& packer<Stream>::pack_uint64(uint64_t d)
hideakitai 0:3f9dbf1e2cb0 721 { pack_imp_uint64(d); return *this; }
hideakitai 0:3f9dbf1e2cb0 722
hideakitai 0:3f9dbf1e2cb0 723 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 724 inline packer<Stream>& packer<Stream>::pack_int8(int8_t d)
hideakitai 0:3f9dbf1e2cb0 725 { pack_imp_int8(d); return *this; }
hideakitai 0:3f9dbf1e2cb0 726
hideakitai 0:3f9dbf1e2cb0 727 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 728 inline packer<Stream>& packer<Stream>::pack_int16(int16_t d)
hideakitai 0:3f9dbf1e2cb0 729 { pack_imp_int16(d); return *this; }
hideakitai 0:3f9dbf1e2cb0 730
hideakitai 0:3f9dbf1e2cb0 731 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 732 inline packer<Stream>& packer<Stream>::pack_int32(int32_t d)
hideakitai 0:3f9dbf1e2cb0 733 { pack_imp_int32(d); return *this; }
hideakitai 0:3f9dbf1e2cb0 734
hideakitai 0:3f9dbf1e2cb0 735 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 736 inline packer<Stream>& packer<Stream>::pack_int64(int64_t d)
hideakitai 0:3f9dbf1e2cb0 737 { pack_imp_int64(d); return *this;}
hideakitai 0:3f9dbf1e2cb0 738
hideakitai 0:3f9dbf1e2cb0 739
hideakitai 0:3f9dbf1e2cb0 740 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 741 inline packer<Stream>& packer<Stream>::pack_fix_uint8(uint8_t d)
hideakitai 0:3f9dbf1e2cb0 742 {
hideakitai 0:3f9dbf1e2cb0 743 char buf[2] = {static_cast<char>(0xccu), take8_8(d)};
hideakitai 0:3f9dbf1e2cb0 744 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 745 return *this;
hideakitai 0:3f9dbf1e2cb0 746 }
hideakitai 0:3f9dbf1e2cb0 747
hideakitai 0:3f9dbf1e2cb0 748 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 749 inline packer<Stream>& packer<Stream>::pack_fix_uint16(uint16_t d)
hideakitai 0:3f9dbf1e2cb0 750 {
hideakitai 0:3f9dbf1e2cb0 751 char buf[3];
hideakitai 0:3f9dbf1e2cb0 752 buf[0] = static_cast<char>(0xcdu); _msgpack_store16(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 753 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 754 return *this;
hideakitai 0:3f9dbf1e2cb0 755 }
hideakitai 0:3f9dbf1e2cb0 756
hideakitai 0:3f9dbf1e2cb0 757 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 758 inline packer<Stream>& packer<Stream>::pack_fix_uint32(uint32_t d)
hideakitai 0:3f9dbf1e2cb0 759 {
hideakitai 0:3f9dbf1e2cb0 760 char buf[5];
hideakitai 0:3f9dbf1e2cb0 761 buf[0] = static_cast<char>(0xceu); _msgpack_store32(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 762 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 763 return *this;
hideakitai 0:3f9dbf1e2cb0 764 }
hideakitai 0:3f9dbf1e2cb0 765
hideakitai 0:3f9dbf1e2cb0 766 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 767 inline packer<Stream>& packer<Stream>::pack_fix_uint64(uint64_t d)
hideakitai 0:3f9dbf1e2cb0 768 {
hideakitai 0:3f9dbf1e2cb0 769 char buf[9];
hideakitai 0:3f9dbf1e2cb0 770 buf[0] = static_cast<char>(0xcfu); _msgpack_store64(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 771 append_buffer(buf, 9);
hideakitai 0:3f9dbf1e2cb0 772 return *this;
hideakitai 0:3f9dbf1e2cb0 773 }
hideakitai 0:3f9dbf1e2cb0 774
hideakitai 0:3f9dbf1e2cb0 775 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 776 inline packer<Stream>& packer<Stream>::pack_fix_int8(int8_t d)
hideakitai 0:3f9dbf1e2cb0 777 {
hideakitai 0:3f9dbf1e2cb0 778 char buf[2] = {static_cast<char>(0xd0u), take8_8(d)};
hideakitai 0:3f9dbf1e2cb0 779 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 780 return *this;
hideakitai 0:3f9dbf1e2cb0 781 }
hideakitai 0:3f9dbf1e2cb0 782
hideakitai 0:3f9dbf1e2cb0 783 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 784 inline packer<Stream>& packer<Stream>::pack_fix_int16(int16_t d)
hideakitai 0:3f9dbf1e2cb0 785 {
hideakitai 0:3f9dbf1e2cb0 786 char buf[3];
hideakitai 0:3f9dbf1e2cb0 787 buf[0] = static_cast<char>(0xd1u); _msgpack_store16(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 788 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 789 return *this;
hideakitai 0:3f9dbf1e2cb0 790 }
hideakitai 0:3f9dbf1e2cb0 791
hideakitai 0:3f9dbf1e2cb0 792 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 793 inline packer<Stream>& packer<Stream>::pack_fix_int32(int32_t d)
hideakitai 0:3f9dbf1e2cb0 794 {
hideakitai 0:3f9dbf1e2cb0 795 char buf[5];
hideakitai 0:3f9dbf1e2cb0 796 buf[0] = static_cast<char>(0xd2u); _msgpack_store32(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 797 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 798 return *this;
hideakitai 0:3f9dbf1e2cb0 799 }
hideakitai 0:3f9dbf1e2cb0 800
hideakitai 0:3f9dbf1e2cb0 801 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 802 inline packer<Stream>& packer<Stream>::pack_fix_int64(int64_t d)
hideakitai 0:3f9dbf1e2cb0 803 {
hideakitai 0:3f9dbf1e2cb0 804 char buf[9];
hideakitai 0:3f9dbf1e2cb0 805 buf[0] = static_cast<char>(0xd3u); _msgpack_store64(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 806 append_buffer(buf, 9);
hideakitai 0:3f9dbf1e2cb0 807 return *this;
hideakitai 0:3f9dbf1e2cb0 808 }
hideakitai 0:3f9dbf1e2cb0 809
hideakitai 0:3f9dbf1e2cb0 810
hideakitai 0:3f9dbf1e2cb0 811 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 812 inline packer<Stream>& packer<Stream>::pack_char(char d)
hideakitai 0:3f9dbf1e2cb0 813 {
hideakitai 0:3f9dbf1e2cb0 814 #if defined(CHAR_MIN)
hideakitai 0:3f9dbf1e2cb0 815 #if CHAR_MIN < 0
hideakitai 0:3f9dbf1e2cb0 816 pack_imp_int8(d);
hideakitai 0:3f9dbf1e2cb0 817 #else
hideakitai 0:3f9dbf1e2cb0 818 pack_imp_uint8(d);
hideakitai 0:3f9dbf1e2cb0 819 #endif
hideakitai 0:3f9dbf1e2cb0 820 #else
hideakitai 0:3f9dbf1e2cb0 821 #error CHAR_MIN is not defined
hideakitai 0:3f9dbf1e2cb0 822 #endif
hideakitai 0:3f9dbf1e2cb0 823 return *this;
hideakitai 0:3f9dbf1e2cb0 824 }
hideakitai 0:3f9dbf1e2cb0 825
hideakitai 0:3f9dbf1e2cb0 826 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 827 inline packer<Stream>& packer<Stream>::pack_signed_char(signed char d)
hideakitai 0:3f9dbf1e2cb0 828 {
hideakitai 0:3f9dbf1e2cb0 829 pack_imp_int8(d);
hideakitai 0:3f9dbf1e2cb0 830 return *this;
hideakitai 0:3f9dbf1e2cb0 831 }
hideakitai 0:3f9dbf1e2cb0 832
hideakitai 0:3f9dbf1e2cb0 833 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 834 inline packer<Stream>& packer<Stream>::pack_short(short d)
hideakitai 0:3f9dbf1e2cb0 835 {
hideakitai 0:3f9dbf1e2cb0 836 #if defined(SIZEOF_SHORT)
hideakitai 0:3f9dbf1e2cb0 837 #if SIZEOF_SHORT == 2
hideakitai 0:3f9dbf1e2cb0 838 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 839 #elif SIZEOF_SHORT == 4
hideakitai 0:3f9dbf1e2cb0 840 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 841 #else
hideakitai 0:3f9dbf1e2cb0 842 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 843 #endif
hideakitai 0:3f9dbf1e2cb0 844
hideakitai 0:3f9dbf1e2cb0 845 #elif defined(SHRT_MAX)
hideakitai 0:3f9dbf1e2cb0 846 #if SHRT_MAX == 0x7fff
hideakitai 0:3f9dbf1e2cb0 847 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 848 #elif SHRT_MAX == 0x7fffffff
hideakitai 0:3f9dbf1e2cb0 849 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 850 #else
hideakitai 0:3f9dbf1e2cb0 851 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 852 #endif
hideakitai 0:3f9dbf1e2cb0 853
hideakitai 0:3f9dbf1e2cb0 854 #else
hideakitai 0:3f9dbf1e2cb0 855 if(sizeof(short) == 2) {
hideakitai 0:3f9dbf1e2cb0 856 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 857 } else if(sizeof(short) == 4) {
hideakitai 0:3f9dbf1e2cb0 858 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 859 } else {
hideakitai 0:3f9dbf1e2cb0 860 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 861 }
hideakitai 0:3f9dbf1e2cb0 862 #endif
hideakitai 0:3f9dbf1e2cb0 863 return *this;
hideakitai 0:3f9dbf1e2cb0 864 }
hideakitai 0:3f9dbf1e2cb0 865
hideakitai 0:3f9dbf1e2cb0 866 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 867 inline packer<Stream>& packer<Stream>::pack_int(int d)
hideakitai 0:3f9dbf1e2cb0 868 {
hideakitai 0:3f9dbf1e2cb0 869 #if defined(SIZEOF_INT)
hideakitai 0:3f9dbf1e2cb0 870 #if SIZEOF_INT == 2
hideakitai 0:3f9dbf1e2cb0 871 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 872 #elif SIZEOF_INT == 4
hideakitai 0:3f9dbf1e2cb0 873 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 874 #else
hideakitai 0:3f9dbf1e2cb0 875 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 876 #endif
hideakitai 0:3f9dbf1e2cb0 877
hideakitai 0:3f9dbf1e2cb0 878 #elif defined(INT_MAX)
hideakitai 0:3f9dbf1e2cb0 879 #if INT_MAX == 0x7fff
hideakitai 0:3f9dbf1e2cb0 880 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 881 #elif INT_MAX == 0x7fffffff
hideakitai 0:3f9dbf1e2cb0 882 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 883 #else
hideakitai 0:3f9dbf1e2cb0 884 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 885 #endif
hideakitai 0:3f9dbf1e2cb0 886
hideakitai 0:3f9dbf1e2cb0 887 #else
hideakitai 0:3f9dbf1e2cb0 888 if(sizeof(int) == 2) {
hideakitai 0:3f9dbf1e2cb0 889 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 890 } else if(sizeof(int) == 4) {
hideakitai 0:3f9dbf1e2cb0 891 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 892 } else {
hideakitai 0:3f9dbf1e2cb0 893 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 894 }
hideakitai 0:3f9dbf1e2cb0 895 #endif
hideakitai 0:3f9dbf1e2cb0 896 return *this;
hideakitai 0:3f9dbf1e2cb0 897 }
hideakitai 0:3f9dbf1e2cb0 898
hideakitai 0:3f9dbf1e2cb0 899 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 900 inline packer<Stream>& packer<Stream>::pack_long(long d)
hideakitai 0:3f9dbf1e2cb0 901 {
hideakitai 0:3f9dbf1e2cb0 902 #if defined(SIZEOF_LONG)
hideakitai 0:3f9dbf1e2cb0 903 #if SIZEOF_LONG == 2
hideakitai 0:3f9dbf1e2cb0 904 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 905 #elif SIZEOF_LONG == 4
hideakitai 0:3f9dbf1e2cb0 906 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 907 #else
hideakitai 0:3f9dbf1e2cb0 908 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 909 #endif
hideakitai 0:3f9dbf1e2cb0 910
hideakitai 0:3f9dbf1e2cb0 911 #elif defined(LONG_MAX)
hideakitai 0:3f9dbf1e2cb0 912 #if LONG_MAX == 0x7fffL
hideakitai 0:3f9dbf1e2cb0 913 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 914 #elif LONG_MAX == 0x7fffffffL
hideakitai 0:3f9dbf1e2cb0 915 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 916 #else
hideakitai 0:3f9dbf1e2cb0 917 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 918 #endif
hideakitai 0:3f9dbf1e2cb0 919
hideakitai 0:3f9dbf1e2cb0 920 #else
hideakitai 0:3f9dbf1e2cb0 921 if(sizeof(long) == 2) {
hideakitai 0:3f9dbf1e2cb0 922 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 923 } else if(sizeof(long) == 4) {
hideakitai 0:3f9dbf1e2cb0 924 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 925 } else {
hideakitai 0:3f9dbf1e2cb0 926 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 927 }
hideakitai 0:3f9dbf1e2cb0 928 #endif
hideakitai 0:3f9dbf1e2cb0 929 return *this;
hideakitai 0:3f9dbf1e2cb0 930 }
hideakitai 0:3f9dbf1e2cb0 931
hideakitai 0:3f9dbf1e2cb0 932 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 933 inline packer<Stream>& packer<Stream>::pack_long_long(long long d)
hideakitai 0:3f9dbf1e2cb0 934 {
hideakitai 0:3f9dbf1e2cb0 935 #if defined(SIZEOF_LONG_LONG)
hideakitai 0:3f9dbf1e2cb0 936 #if SIZEOF_LONG_LONG == 2
hideakitai 0:3f9dbf1e2cb0 937 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 938 #elif SIZEOF_LONG_LONG == 4
hideakitai 0:3f9dbf1e2cb0 939 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 940 #else
hideakitai 0:3f9dbf1e2cb0 941 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 942 #endif
hideakitai 0:3f9dbf1e2cb0 943
hideakitai 0:3f9dbf1e2cb0 944 #elif defined(LLONG_MAX)
hideakitai 0:3f9dbf1e2cb0 945 #if LLONG_MAX == 0x7fffL
hideakitai 0:3f9dbf1e2cb0 946 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 947 #elif LLONG_MAX == 0x7fffffffL
hideakitai 0:3f9dbf1e2cb0 948 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 949 #else
hideakitai 0:3f9dbf1e2cb0 950 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 951 #endif
hideakitai 0:3f9dbf1e2cb0 952
hideakitai 0:3f9dbf1e2cb0 953 #else
hideakitai 0:3f9dbf1e2cb0 954 if(sizeof(long long) == 2) {
hideakitai 0:3f9dbf1e2cb0 955 pack_imp_int16(d);
hideakitai 0:3f9dbf1e2cb0 956 } else if(sizeof(long long) == 4) {
hideakitai 0:3f9dbf1e2cb0 957 pack_imp_int32(d);
hideakitai 0:3f9dbf1e2cb0 958 } else {
hideakitai 0:3f9dbf1e2cb0 959 pack_imp_int64(d);
hideakitai 0:3f9dbf1e2cb0 960 }
hideakitai 0:3f9dbf1e2cb0 961 #endif
hideakitai 0:3f9dbf1e2cb0 962 return *this;
hideakitai 0:3f9dbf1e2cb0 963 }
hideakitai 0:3f9dbf1e2cb0 964
hideakitai 0:3f9dbf1e2cb0 965
hideakitai 0:3f9dbf1e2cb0 966 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 967 inline packer<Stream>& packer<Stream>::pack_unsigned_char(unsigned char d)
hideakitai 0:3f9dbf1e2cb0 968 {
hideakitai 0:3f9dbf1e2cb0 969 pack_imp_uint8(d);
hideakitai 0:3f9dbf1e2cb0 970 return *this;
hideakitai 0:3f9dbf1e2cb0 971 }
hideakitai 0:3f9dbf1e2cb0 972
hideakitai 0:3f9dbf1e2cb0 973 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 974 inline packer<Stream>& packer<Stream>::pack_unsigned_short(unsigned short d)
hideakitai 0:3f9dbf1e2cb0 975 {
hideakitai 0:3f9dbf1e2cb0 976 #if defined(SIZEOF_SHORT)
hideakitai 0:3f9dbf1e2cb0 977 #if SIZEOF_SHORT == 2
hideakitai 0:3f9dbf1e2cb0 978 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 979 #elif SIZEOF_SHORT == 4
hideakitai 0:3f9dbf1e2cb0 980 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 981 #else
hideakitai 0:3f9dbf1e2cb0 982 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 983 #endif
hideakitai 0:3f9dbf1e2cb0 984
hideakitai 0:3f9dbf1e2cb0 985 #elif defined(USHRT_MAX)
hideakitai 0:3f9dbf1e2cb0 986 #if USHRT_MAX == 0xffffU
hideakitai 0:3f9dbf1e2cb0 987 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 988 #elif USHRT_MAX == 0xffffffffU
hideakitai 0:3f9dbf1e2cb0 989 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 990 #else
hideakitai 0:3f9dbf1e2cb0 991 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 992 #endif
hideakitai 0:3f9dbf1e2cb0 993
hideakitai 0:3f9dbf1e2cb0 994 #else
hideakitai 0:3f9dbf1e2cb0 995 if(sizeof(unsigned short) == 2) {
hideakitai 0:3f9dbf1e2cb0 996 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 997 } else if(sizeof(unsigned short) == 4) {
hideakitai 0:3f9dbf1e2cb0 998 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 999 } else {
hideakitai 0:3f9dbf1e2cb0 1000 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1001 }
hideakitai 0:3f9dbf1e2cb0 1002 #endif
hideakitai 0:3f9dbf1e2cb0 1003 return *this;
hideakitai 0:3f9dbf1e2cb0 1004 }
hideakitai 0:3f9dbf1e2cb0 1005
hideakitai 0:3f9dbf1e2cb0 1006 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1007 inline packer<Stream>& packer<Stream>::pack_unsigned_int(unsigned int d)
hideakitai 0:3f9dbf1e2cb0 1008 {
hideakitai 0:3f9dbf1e2cb0 1009 #if defined(SIZEOF_INT)
hideakitai 0:3f9dbf1e2cb0 1010 #if SIZEOF_INT == 2
hideakitai 0:3f9dbf1e2cb0 1011 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1012 #elif SIZEOF_INT == 4
hideakitai 0:3f9dbf1e2cb0 1013 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1014 #else
hideakitai 0:3f9dbf1e2cb0 1015 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1016 #endif
hideakitai 0:3f9dbf1e2cb0 1017
hideakitai 0:3f9dbf1e2cb0 1018 #elif defined(UINT_MAX)
hideakitai 0:3f9dbf1e2cb0 1019 #if UINT_MAX == 0xffffU
hideakitai 0:3f9dbf1e2cb0 1020 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1021 #elif UINT_MAX == 0xffffffffU
hideakitai 0:3f9dbf1e2cb0 1022 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1023 #else
hideakitai 0:3f9dbf1e2cb0 1024 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1025 #endif
hideakitai 0:3f9dbf1e2cb0 1026
hideakitai 0:3f9dbf1e2cb0 1027 #else
hideakitai 0:3f9dbf1e2cb0 1028 if(sizeof(unsigned int) == 2) {
hideakitai 0:3f9dbf1e2cb0 1029 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1030 } else if(sizeof(unsigned int) == 4) {
hideakitai 0:3f9dbf1e2cb0 1031 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1032 } else {
hideakitai 0:3f9dbf1e2cb0 1033 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1034 }
hideakitai 0:3f9dbf1e2cb0 1035 #endif
hideakitai 0:3f9dbf1e2cb0 1036 return *this;
hideakitai 0:3f9dbf1e2cb0 1037 }
hideakitai 0:3f9dbf1e2cb0 1038
hideakitai 0:3f9dbf1e2cb0 1039 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1040 inline packer<Stream>& packer<Stream>::pack_unsigned_long(unsigned long d)
hideakitai 0:3f9dbf1e2cb0 1041 {
hideakitai 0:3f9dbf1e2cb0 1042 #if defined(SIZEOF_LONG)
hideakitai 0:3f9dbf1e2cb0 1043 #if SIZEOF_LONG == 2
hideakitai 0:3f9dbf1e2cb0 1044 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1045 #elif SIZEOF_LONG == 4
hideakitai 0:3f9dbf1e2cb0 1046 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1047 #else
hideakitai 0:3f9dbf1e2cb0 1048 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1049 #endif
hideakitai 0:3f9dbf1e2cb0 1050
hideakitai 0:3f9dbf1e2cb0 1051 #elif defined(ULONG_MAX)
hideakitai 0:3f9dbf1e2cb0 1052 #if ULONG_MAX == 0xffffUL
hideakitai 0:3f9dbf1e2cb0 1053 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1054 #elif ULONG_MAX == 0xffffffffUL
hideakitai 0:3f9dbf1e2cb0 1055 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1056 #else
hideakitai 0:3f9dbf1e2cb0 1057 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1058 #endif
hideakitai 0:3f9dbf1e2cb0 1059
hideakitai 0:3f9dbf1e2cb0 1060 #else
hideakitai 0:3f9dbf1e2cb0 1061 if(sizeof(unsigned long) == 2) {
hideakitai 0:3f9dbf1e2cb0 1062 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1063 } else if(sizeof(unsigned long) == 4) {
hideakitai 0:3f9dbf1e2cb0 1064 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1065 } else {
hideakitai 0:3f9dbf1e2cb0 1066 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1067 }
hideakitai 0:3f9dbf1e2cb0 1068 #endif
hideakitai 0:3f9dbf1e2cb0 1069 return *this;
hideakitai 0:3f9dbf1e2cb0 1070 }
hideakitai 0:3f9dbf1e2cb0 1071
hideakitai 0:3f9dbf1e2cb0 1072 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1073 inline packer<Stream>& packer<Stream>::pack_unsigned_long_long(unsigned long long d)
hideakitai 0:3f9dbf1e2cb0 1074 {
hideakitai 0:3f9dbf1e2cb0 1075 #if defined(SIZEOF_LONG_LONG)
hideakitai 0:3f9dbf1e2cb0 1076 #if SIZEOF_LONG_LONG == 2
hideakitai 0:3f9dbf1e2cb0 1077 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1078 #elif SIZEOF_LONG_LONG == 4
hideakitai 0:3f9dbf1e2cb0 1079 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1080 #else
hideakitai 0:3f9dbf1e2cb0 1081 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1082 #endif
hideakitai 0:3f9dbf1e2cb0 1083
hideakitai 0:3f9dbf1e2cb0 1084 #elif defined(ULLONG_MAX)
hideakitai 0:3f9dbf1e2cb0 1085 #if ULLONG_MAX == 0xffffUL
hideakitai 0:3f9dbf1e2cb0 1086 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1087 #elif ULLONG_MAX == 0xffffffffUL
hideakitai 0:3f9dbf1e2cb0 1088 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1089 #else
hideakitai 0:3f9dbf1e2cb0 1090 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1091 #endif
hideakitai 0:3f9dbf1e2cb0 1092
hideakitai 0:3f9dbf1e2cb0 1093 #else
hideakitai 0:3f9dbf1e2cb0 1094 if(sizeof(unsigned long long) == 2) {
hideakitai 0:3f9dbf1e2cb0 1095 pack_imp_uint16(d);
hideakitai 0:3f9dbf1e2cb0 1096 } else if(sizeof(unsigned long long) == 4) {
hideakitai 0:3f9dbf1e2cb0 1097 pack_imp_uint32(d);
hideakitai 0:3f9dbf1e2cb0 1098 } else {
hideakitai 0:3f9dbf1e2cb0 1099 pack_imp_uint64(d);
hideakitai 0:3f9dbf1e2cb0 1100 }
hideakitai 0:3f9dbf1e2cb0 1101 #endif
hideakitai 0:3f9dbf1e2cb0 1102 return *this;
hideakitai 0:3f9dbf1e2cb0 1103 }
hideakitai 0:3f9dbf1e2cb0 1104
hideakitai 0:3f9dbf1e2cb0 1105
hideakitai 0:3f9dbf1e2cb0 1106 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1107 inline packer<Stream>& packer<Stream>::pack_float(float d)
hideakitai 0:3f9dbf1e2cb0 1108 {
hideakitai 0:3f9dbf1e2cb0 1109 union { float f; uint32_t i; } mem;
hideakitai 0:3f9dbf1e2cb0 1110 mem.f = d;
hideakitai 0:3f9dbf1e2cb0 1111 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1112 buf[0] = static_cast<char>(0xcau); _msgpack_store32(&buf[1], mem.i);
hideakitai 0:3f9dbf1e2cb0 1113 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1114 return *this;
hideakitai 0:3f9dbf1e2cb0 1115 }
hideakitai 0:3f9dbf1e2cb0 1116
hideakitai 0:3f9dbf1e2cb0 1117 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1118 inline packer<Stream>& packer<Stream>::pack_double(double d)
hideakitai 0:3f9dbf1e2cb0 1119 {
hideakitai 0:3f9dbf1e2cb0 1120 union { double f; uint64_t i; } mem;
hideakitai 0:3f9dbf1e2cb0 1121 mem.f = d;
hideakitai 0:3f9dbf1e2cb0 1122 char buf[9];
hideakitai 0:3f9dbf1e2cb0 1123 buf[0] = static_cast<char>(0xcbu);
hideakitai 0:3f9dbf1e2cb0 1124
hideakitai 0:3f9dbf1e2cb0 1125 #if defined(TARGET_OS_IPHONE)
hideakitai 0:3f9dbf1e2cb0 1126 // ok
hideakitai 0:3f9dbf1e2cb0 1127 #elif defined(__arm__) && !(__ARM_EABI__) // arm-oabi
hideakitai 0:3f9dbf1e2cb0 1128 // https://github.com/msgpack/msgpack-perl/pull/1
hideakitai 0:3f9dbf1e2cb0 1129 mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
hideakitai 0:3f9dbf1e2cb0 1130 #endif
hideakitai 0:3f9dbf1e2cb0 1131 _msgpack_store64(&buf[1], mem.i);
hideakitai 0:3f9dbf1e2cb0 1132 append_buffer(buf, 9);
hideakitai 0:3f9dbf1e2cb0 1133 return *this;
hideakitai 0:3f9dbf1e2cb0 1134 }
hideakitai 0:3f9dbf1e2cb0 1135
hideakitai 0:3f9dbf1e2cb0 1136
hideakitai 0:3f9dbf1e2cb0 1137 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1138 inline packer<Stream>& packer<Stream>::pack_nil()
hideakitai 0:3f9dbf1e2cb0 1139 {
hideakitai 0:3f9dbf1e2cb0 1140 const char d = static_cast<char>(0xc0u);
hideakitai 0:3f9dbf1e2cb0 1141 append_buffer(&d, 1);
hideakitai 0:3f9dbf1e2cb0 1142 return *this;
hideakitai 0:3f9dbf1e2cb0 1143 }
hideakitai 0:3f9dbf1e2cb0 1144
hideakitai 0:3f9dbf1e2cb0 1145 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1146 inline packer<Stream>& packer<Stream>::pack_true()
hideakitai 0:3f9dbf1e2cb0 1147 {
hideakitai 0:3f9dbf1e2cb0 1148 const char d = static_cast<char>(0xc3u);
hideakitai 0:3f9dbf1e2cb0 1149 append_buffer(&d, 1);
hideakitai 0:3f9dbf1e2cb0 1150 return *this;
hideakitai 0:3f9dbf1e2cb0 1151 }
hideakitai 0:3f9dbf1e2cb0 1152
hideakitai 0:3f9dbf1e2cb0 1153 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1154 inline packer<Stream>& packer<Stream>::pack_false()
hideakitai 0:3f9dbf1e2cb0 1155 {
hideakitai 0:3f9dbf1e2cb0 1156 const char d = static_cast<char>(0xc2u);
hideakitai 0:3f9dbf1e2cb0 1157 append_buffer(&d, 1);
hideakitai 0:3f9dbf1e2cb0 1158 return *this;
hideakitai 0:3f9dbf1e2cb0 1159 }
hideakitai 0:3f9dbf1e2cb0 1160
hideakitai 0:3f9dbf1e2cb0 1161
hideakitai 0:3f9dbf1e2cb0 1162 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1163 inline packer<Stream>& packer<Stream>::pack_array(uint32_t n)
hideakitai 0:3f9dbf1e2cb0 1164 {
hideakitai 0:3f9dbf1e2cb0 1165 if(n < 16) {
hideakitai 0:3f9dbf1e2cb0 1166 char d = static_cast<char>(0x90u | n);
hideakitai 0:3f9dbf1e2cb0 1167 append_buffer(&d, 1);
hideakitai 0:3f9dbf1e2cb0 1168 } else if(n < 65536) {
hideakitai 0:3f9dbf1e2cb0 1169 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1170 buf[0] = static_cast<char>(0xdcu); _msgpack_store16(&buf[1], static_cast<uint16_t>(n));
hideakitai 0:3f9dbf1e2cb0 1171 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1172 } else {
hideakitai 0:3f9dbf1e2cb0 1173 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1174 buf[0] = static_cast<char>(0xddu); _msgpack_store32(&buf[1], static_cast<uint32_t>(n));
hideakitai 0:3f9dbf1e2cb0 1175 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1176 }
hideakitai 0:3f9dbf1e2cb0 1177 return *this;
hideakitai 0:3f9dbf1e2cb0 1178 }
hideakitai 0:3f9dbf1e2cb0 1179
hideakitai 0:3f9dbf1e2cb0 1180 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1181 inline packer<Stream>& packer<Stream>::pack_map(uint32_t n)
hideakitai 0:3f9dbf1e2cb0 1182 {
hideakitai 0:3f9dbf1e2cb0 1183 if(n < 16) {
hideakitai 0:3f9dbf1e2cb0 1184 unsigned char d = static_cast<unsigned char>(0x80u | n);
hideakitai 0:3f9dbf1e2cb0 1185 char buf = take8_8(d);
hideakitai 0:3f9dbf1e2cb0 1186 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1187 } else if(n < 65536) {
hideakitai 0:3f9dbf1e2cb0 1188 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1189 buf[0] = static_cast<char>(0xdeu); _msgpack_store16(&buf[1], static_cast<uint16_t>(n));
hideakitai 0:3f9dbf1e2cb0 1190 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1191 } else {
hideakitai 0:3f9dbf1e2cb0 1192 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1193 buf[0] = static_cast<char>(0xdfu); _msgpack_store32(&buf[1], static_cast<uint32_t>(n));
hideakitai 0:3f9dbf1e2cb0 1194 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1195 }
hideakitai 0:3f9dbf1e2cb0 1196 return *this;
hideakitai 0:3f9dbf1e2cb0 1197 }
hideakitai 0:3f9dbf1e2cb0 1198
hideakitai 0:3f9dbf1e2cb0 1199 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1200 inline packer<Stream>& packer<Stream>::pack_str(uint32_t l)
hideakitai 0:3f9dbf1e2cb0 1201 {
hideakitai 0:3f9dbf1e2cb0 1202 if(l < 32) {
hideakitai 0:3f9dbf1e2cb0 1203 unsigned char d = static_cast<uint8_t>(0xa0u | l);
hideakitai 0:3f9dbf1e2cb0 1204 char buf = take8_8(d);
hideakitai 0:3f9dbf1e2cb0 1205 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1206 } else if(l < 256) {
hideakitai 0:3f9dbf1e2cb0 1207 char buf[2];
hideakitai 0:3f9dbf1e2cb0 1208 buf[0] = static_cast<char>(0xd9u); buf[1] = static_cast<uint8_t>(l);
hideakitai 0:3f9dbf1e2cb0 1209 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1210 } else if(l < 65536) {
hideakitai 0:3f9dbf1e2cb0 1211 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1212 buf[0] = static_cast<char>(0xdau); _msgpack_store16(&buf[1], static_cast<uint16_t>(l));
hideakitai 0:3f9dbf1e2cb0 1213 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1214 } else {
hideakitai 0:3f9dbf1e2cb0 1215 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1216 buf[0] = static_cast<char>(0xdbu); _msgpack_store32(&buf[1], static_cast<uint32_t>(l));
hideakitai 0:3f9dbf1e2cb0 1217 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1218 }
hideakitai 0:3f9dbf1e2cb0 1219 return *this;
hideakitai 0:3f9dbf1e2cb0 1220 }
hideakitai 0:3f9dbf1e2cb0 1221
hideakitai 0:3f9dbf1e2cb0 1222 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1223 inline packer<Stream>& packer<Stream>::pack_str_body(const char* b, uint32_t l)
hideakitai 0:3f9dbf1e2cb0 1224 {
hideakitai 0:3f9dbf1e2cb0 1225 append_buffer(b, l);
hideakitai 0:3f9dbf1e2cb0 1226 return *this;
hideakitai 0:3f9dbf1e2cb0 1227 }
hideakitai 0:3f9dbf1e2cb0 1228
hideakitai 0:3f9dbf1e2cb0 1229 // Raw (V4)
hideakitai 0:3f9dbf1e2cb0 1230
hideakitai 0:3f9dbf1e2cb0 1231 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1232 inline packer<Stream>& packer<Stream>::pack_v4raw(uint32_t l)
hideakitai 0:3f9dbf1e2cb0 1233 {
hideakitai 0:3f9dbf1e2cb0 1234 if(l < 32) {
hideakitai 0:3f9dbf1e2cb0 1235 unsigned char d = static_cast<uint8_t>(0xa0u | l);
hideakitai 0:3f9dbf1e2cb0 1236 char buf = take8_8(d);
hideakitai 0:3f9dbf1e2cb0 1237 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1238 } else if(l < 65536) {
hideakitai 0:3f9dbf1e2cb0 1239 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1240 buf[0] = static_cast<char>(0xdau); _msgpack_store16(&buf[1], static_cast<uint16_t>(l));
hideakitai 0:3f9dbf1e2cb0 1241 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1242 } else {
hideakitai 0:3f9dbf1e2cb0 1243 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1244 buf[0] = static_cast<char>(0xdbu); _msgpack_store32(&buf[1], static_cast<uint32_t>(l));
hideakitai 0:3f9dbf1e2cb0 1245 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1246 }
hideakitai 0:3f9dbf1e2cb0 1247 return *this;
hideakitai 0:3f9dbf1e2cb0 1248 }
hideakitai 0:3f9dbf1e2cb0 1249
hideakitai 0:3f9dbf1e2cb0 1250 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1251 inline packer<Stream>& packer<Stream>::pack_v4raw_body(const char* b, uint32_t l)
hideakitai 0:3f9dbf1e2cb0 1252 {
hideakitai 0:3f9dbf1e2cb0 1253 append_buffer(b, l);
hideakitai 0:3f9dbf1e2cb0 1254 return *this;
hideakitai 0:3f9dbf1e2cb0 1255 }
hideakitai 0:3f9dbf1e2cb0 1256
hideakitai 0:3f9dbf1e2cb0 1257 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1258 inline packer<Stream>& packer<Stream>::pack_bin(uint32_t l)
hideakitai 0:3f9dbf1e2cb0 1259 {
hideakitai 0:3f9dbf1e2cb0 1260 if(l < 256) {
hideakitai 0:3f9dbf1e2cb0 1261 char buf[2];
hideakitai 0:3f9dbf1e2cb0 1262 buf[0] = static_cast<char>(0xc4u); buf[1] = static_cast<uint8_t>(l);
hideakitai 0:3f9dbf1e2cb0 1263 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1264 } else if(l < 65536) {
hideakitai 0:3f9dbf1e2cb0 1265 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1266 buf[0] = static_cast<char>(0xc5u); _msgpack_store16(&buf[1], static_cast<uint16_t>(l));
hideakitai 0:3f9dbf1e2cb0 1267 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1268 } else {
hideakitai 0:3f9dbf1e2cb0 1269 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1270 buf[0] = static_cast<char>(0xc6u); _msgpack_store32(&buf[1], static_cast<uint32_t>(l));
hideakitai 0:3f9dbf1e2cb0 1271 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1272 }
hideakitai 0:3f9dbf1e2cb0 1273 return *this;
hideakitai 0:3f9dbf1e2cb0 1274 }
hideakitai 0:3f9dbf1e2cb0 1275
hideakitai 0:3f9dbf1e2cb0 1276 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1277 inline packer<Stream>& packer<Stream>::pack_bin_body(const char* b, uint32_t l)
hideakitai 0:3f9dbf1e2cb0 1278 {
hideakitai 0:3f9dbf1e2cb0 1279 append_buffer(b, l);
hideakitai 0:3f9dbf1e2cb0 1280 return *this;
hideakitai 0:3f9dbf1e2cb0 1281 }
hideakitai 0:3f9dbf1e2cb0 1282
hideakitai 0:3f9dbf1e2cb0 1283 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1284 inline packer<Stream>& packer<Stream>::pack_ext(size_t l, int8_t type)
hideakitai 0:3f9dbf1e2cb0 1285 {
hideakitai 0:3f9dbf1e2cb0 1286 switch(l) {
hideakitai 0:3f9dbf1e2cb0 1287 case 1: {
hideakitai 0:3f9dbf1e2cb0 1288 char buf[2];
hideakitai 0:3f9dbf1e2cb0 1289 buf[0] = static_cast<char>(0xd4u);
hideakitai 0:3f9dbf1e2cb0 1290 buf[1] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1291 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1292 } break;
hideakitai 0:3f9dbf1e2cb0 1293 case 2: {
hideakitai 0:3f9dbf1e2cb0 1294 char buf[2];
hideakitai 0:3f9dbf1e2cb0 1295 buf[0] = static_cast<char>(0xd5u);
hideakitai 0:3f9dbf1e2cb0 1296 buf[1] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1297 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1298 } break;
hideakitai 0:3f9dbf1e2cb0 1299 case 4: {
hideakitai 0:3f9dbf1e2cb0 1300 char buf[2];
hideakitai 0:3f9dbf1e2cb0 1301 buf[0] = static_cast<char>(0xd6u);
hideakitai 0:3f9dbf1e2cb0 1302 buf[1] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1303 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1304 } break;
hideakitai 0:3f9dbf1e2cb0 1305 case 8: {
hideakitai 0:3f9dbf1e2cb0 1306 char buf[2];
hideakitai 0:3f9dbf1e2cb0 1307 buf[0] = static_cast<char>(0xd7u);
hideakitai 0:3f9dbf1e2cb0 1308 buf[1] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1309 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1310 } break;
hideakitai 0:3f9dbf1e2cb0 1311 case 16: {
hideakitai 0:3f9dbf1e2cb0 1312 char buf[2];
hideakitai 0:3f9dbf1e2cb0 1313 buf[0] = static_cast<char>(0xd8u);
hideakitai 0:3f9dbf1e2cb0 1314 buf[1] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1315 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1316 } break;
hideakitai 0:3f9dbf1e2cb0 1317 default:
hideakitai 0:3f9dbf1e2cb0 1318 if(l < 256) {
hideakitai 0:3f9dbf1e2cb0 1319 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1320 buf[0] = static_cast<char>(0xc7u);
hideakitai 0:3f9dbf1e2cb0 1321 buf[1] = static_cast<char>(l);
hideakitai 0:3f9dbf1e2cb0 1322 buf[2] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1323 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1324 } else if(l < 65536) {
hideakitai 0:3f9dbf1e2cb0 1325 char buf[4];
hideakitai 0:3f9dbf1e2cb0 1326 buf[0] = static_cast<char>(0xc8u);
hideakitai 0:3f9dbf1e2cb0 1327 _msgpack_store16(&buf[1], static_cast<uint16_t>(l));
hideakitai 0:3f9dbf1e2cb0 1328 buf[3] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1329 append_buffer(buf, 4);
hideakitai 0:3f9dbf1e2cb0 1330 } else {
hideakitai 0:3f9dbf1e2cb0 1331 char buf[6];
hideakitai 0:3f9dbf1e2cb0 1332 buf[0] = static_cast<char>(0xc9u);
hideakitai 0:3f9dbf1e2cb0 1333 _msgpack_store32(&buf[1], static_cast<uint32_t>(l));
hideakitai 0:3f9dbf1e2cb0 1334 buf[5] = static_cast<char>(type);
hideakitai 0:3f9dbf1e2cb0 1335 append_buffer(buf, 6);
hideakitai 0:3f9dbf1e2cb0 1336 }
hideakitai 0:3f9dbf1e2cb0 1337 break;
hideakitai 0:3f9dbf1e2cb0 1338 }
hideakitai 0:3f9dbf1e2cb0 1339 return *this;
hideakitai 0:3f9dbf1e2cb0 1340 }
hideakitai 0:3f9dbf1e2cb0 1341
hideakitai 0:3f9dbf1e2cb0 1342 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1343 inline packer<Stream>& packer<Stream>::pack_ext_body(const char* b, uint32_t l)
hideakitai 0:3f9dbf1e2cb0 1344 {
hideakitai 0:3f9dbf1e2cb0 1345 append_buffer(b, l);
hideakitai 0:3f9dbf1e2cb0 1346 return *this;
hideakitai 0:3f9dbf1e2cb0 1347 }
hideakitai 0:3f9dbf1e2cb0 1348
hideakitai 0:3f9dbf1e2cb0 1349 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1350 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1351 inline void packer<Stream>::pack_imp_uint8(T d)
hideakitai 0:3f9dbf1e2cb0 1352 {
hideakitai 0:3f9dbf1e2cb0 1353 if(d < (1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1354 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1355 char buf = take8_8(d);
hideakitai 0:3f9dbf1e2cb0 1356 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1357 } else {
hideakitai 0:3f9dbf1e2cb0 1358 /* unsigned 8 */
hideakitai 0:3f9dbf1e2cb0 1359 char buf[2] = {static_cast<char>(0xccu), take8_8(d)};
hideakitai 0:3f9dbf1e2cb0 1360 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1361 }
hideakitai 0:3f9dbf1e2cb0 1362 }
hideakitai 0:3f9dbf1e2cb0 1363
hideakitai 0:3f9dbf1e2cb0 1364 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1365 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1366 inline void packer<Stream>::pack_imp_uint16(T d)
hideakitai 0:3f9dbf1e2cb0 1367 {
hideakitai 0:3f9dbf1e2cb0 1368 if(d < (1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1369 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1370 char buf = take8_16(d);
hideakitai 0:3f9dbf1e2cb0 1371 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1372 } else if(d < (1<<8)) {
hideakitai 0:3f9dbf1e2cb0 1373 /* unsigned 8 */
hideakitai 0:3f9dbf1e2cb0 1374 char buf[2] = {static_cast<char>(0xccu), take8_16(d)};
hideakitai 0:3f9dbf1e2cb0 1375 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1376 } else {
hideakitai 0:3f9dbf1e2cb0 1377 /* unsigned 16 */
hideakitai 0:3f9dbf1e2cb0 1378 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1379 buf[0] = static_cast<char>(0xcdu); _msgpack_store16(&buf[1], static_cast<uint16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1380 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1381 }
hideakitai 0:3f9dbf1e2cb0 1382 }
hideakitai 0:3f9dbf1e2cb0 1383
hideakitai 0:3f9dbf1e2cb0 1384 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1385 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1386 inline void packer<Stream>::pack_imp_uint32(T d)
hideakitai 0:3f9dbf1e2cb0 1387 {
hideakitai 0:3f9dbf1e2cb0 1388 if(d < (1<<8)) {
hideakitai 0:3f9dbf1e2cb0 1389 if(d < (1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1390 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1391 char buf = take8_32(d);
hideakitai 0:3f9dbf1e2cb0 1392 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1393 } else {
hideakitai 0:3f9dbf1e2cb0 1394 /* unsigned 8 */
hideakitai 0:3f9dbf1e2cb0 1395 char buf[2] = {static_cast<char>(0xccu), take8_32(d)};
hideakitai 0:3f9dbf1e2cb0 1396 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1397 }
hideakitai 0:3f9dbf1e2cb0 1398 } else {
hideakitai 0:3f9dbf1e2cb0 1399 if(d < (1<<16)) {
hideakitai 0:3f9dbf1e2cb0 1400 /* unsigned 16 */
hideakitai 0:3f9dbf1e2cb0 1401 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1402 buf[0] = static_cast<char>(0xcdu); _msgpack_store16(&buf[1], static_cast<uint16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1403 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1404 } else {
hideakitai 0:3f9dbf1e2cb0 1405 /* unsigned 32 */
hideakitai 0:3f9dbf1e2cb0 1406 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1407 buf[0] = static_cast<char>(0xceu); _msgpack_store32(&buf[1], static_cast<uint32_t>(d));
hideakitai 0:3f9dbf1e2cb0 1408 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1409 }
hideakitai 0:3f9dbf1e2cb0 1410 }
hideakitai 0:3f9dbf1e2cb0 1411 }
hideakitai 0:3f9dbf1e2cb0 1412
hideakitai 0:3f9dbf1e2cb0 1413 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1414 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1415 inline void packer<Stream>::pack_imp_uint64(T d)
hideakitai 0:3f9dbf1e2cb0 1416 {
hideakitai 0:3f9dbf1e2cb0 1417 if(d < (1ULL<<8)) {
hideakitai 0:3f9dbf1e2cb0 1418 if(d < (1ULL<<7)) {
hideakitai 0:3f9dbf1e2cb0 1419 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1420 char buf = take8_64(d);
hideakitai 0:3f9dbf1e2cb0 1421 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1422 } else {
hideakitai 0:3f9dbf1e2cb0 1423 /* unsigned 8 */
hideakitai 0:3f9dbf1e2cb0 1424 char buf[2] = {static_cast<char>(0xccu), take8_64(d)};
hideakitai 0:3f9dbf1e2cb0 1425 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1426 }
hideakitai 0:3f9dbf1e2cb0 1427 } else {
hideakitai 0:3f9dbf1e2cb0 1428 if(d < (1ULL<<16)) {
hideakitai 0:3f9dbf1e2cb0 1429 /* unsigned 16 */
hideakitai 0:3f9dbf1e2cb0 1430 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1431 buf[0] = static_cast<char>(0xcdu); _msgpack_store16(&buf[1], static_cast<uint16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1432 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1433 } else if(d < (1ULL<<32)) {
hideakitai 0:3f9dbf1e2cb0 1434 /* unsigned 32 */
hideakitai 0:3f9dbf1e2cb0 1435 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1436 buf[0] = static_cast<char>(0xceu); _msgpack_store32(&buf[1], static_cast<uint32_t>(d));
hideakitai 0:3f9dbf1e2cb0 1437 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1438 } else {
hideakitai 0:3f9dbf1e2cb0 1439 /* unsigned 64 */
hideakitai 0:3f9dbf1e2cb0 1440 char buf[9];
hideakitai 0:3f9dbf1e2cb0 1441 buf[0] = static_cast<char>(0xcfu); _msgpack_store64(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 1442 append_buffer(buf, 9);
hideakitai 0:3f9dbf1e2cb0 1443 }
hideakitai 0:3f9dbf1e2cb0 1444 }
hideakitai 0:3f9dbf1e2cb0 1445 }
hideakitai 0:3f9dbf1e2cb0 1446
hideakitai 0:3f9dbf1e2cb0 1447 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1448 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1449 inline void packer<Stream>::pack_imp_int8(T d)
hideakitai 0:3f9dbf1e2cb0 1450 {
hideakitai 0:3f9dbf1e2cb0 1451 if(d < -(1<<5)) {
hideakitai 0:3f9dbf1e2cb0 1452 /* signed 8 */
hideakitai 0:3f9dbf1e2cb0 1453 char buf[2] = {static_cast<char>(0xd0u), take8_8(d)};
hideakitai 0:3f9dbf1e2cb0 1454 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1455 } else {
hideakitai 0:3f9dbf1e2cb0 1456 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1457 char buf = take8_8(d);
hideakitai 0:3f9dbf1e2cb0 1458 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1459 }
hideakitai 0:3f9dbf1e2cb0 1460 }
hideakitai 0:3f9dbf1e2cb0 1461
hideakitai 0:3f9dbf1e2cb0 1462 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1463 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1464 inline void packer<Stream>::pack_imp_int16(T d)
hideakitai 0:3f9dbf1e2cb0 1465 {
hideakitai 0:3f9dbf1e2cb0 1466 if(d < -(1<<5)) {
hideakitai 0:3f9dbf1e2cb0 1467 if(d < -(1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1468 /* signed 16 */
hideakitai 0:3f9dbf1e2cb0 1469 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1470 buf[0] = static_cast<char>(0xd1u); _msgpack_store16(&buf[1], static_cast<int16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1471 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1472 } else {
hideakitai 0:3f9dbf1e2cb0 1473 /* signed 8 */
hideakitai 0:3f9dbf1e2cb0 1474 char buf[2] = {static_cast<char>(0xd0u), take8_16(d)};
hideakitai 0:3f9dbf1e2cb0 1475 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1476 }
hideakitai 0:3f9dbf1e2cb0 1477 } else if(d < (1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1478 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1479 char buf = take8_16(d);
hideakitai 0:3f9dbf1e2cb0 1480 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1481 } else {
hideakitai 0:3f9dbf1e2cb0 1482 if(d < (1<<8)) {
hideakitai 0:3f9dbf1e2cb0 1483 /* unsigned 8 */
hideakitai 0:3f9dbf1e2cb0 1484 char buf[2] = {static_cast<char>(0xccu), take8_16(d)};
hideakitai 0:3f9dbf1e2cb0 1485 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1486 } else {
hideakitai 0:3f9dbf1e2cb0 1487 /* unsigned 16 */
hideakitai 0:3f9dbf1e2cb0 1488 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1489 buf[0] = static_cast<char>(0xcdu); _msgpack_store16(&buf[1], static_cast<uint16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1490 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1491 }
hideakitai 0:3f9dbf1e2cb0 1492 }
hideakitai 0:3f9dbf1e2cb0 1493 }
hideakitai 0:3f9dbf1e2cb0 1494
hideakitai 0:3f9dbf1e2cb0 1495 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1496 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1497 inline void packer<Stream>::pack_imp_int32(T d)
hideakitai 0:3f9dbf1e2cb0 1498 {
hideakitai 0:3f9dbf1e2cb0 1499 if(d < -(1<<5)) {
hideakitai 0:3f9dbf1e2cb0 1500 if(d < -(1<<15)) {
hideakitai 0:3f9dbf1e2cb0 1501 /* signed 32 */
hideakitai 0:3f9dbf1e2cb0 1502 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1503 buf[0] = static_cast<char>(0xd2u); _msgpack_store32(&buf[1], static_cast<int32_t>(d));
hideakitai 0:3f9dbf1e2cb0 1504 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1505 } else if(d < -(1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1506 /* signed 16 */
hideakitai 0:3f9dbf1e2cb0 1507 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1508 buf[0] = static_cast<char>(0xd1u); _msgpack_store16(&buf[1], static_cast<int16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1509 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1510 } else {
hideakitai 0:3f9dbf1e2cb0 1511 /* signed 8 */
hideakitai 0:3f9dbf1e2cb0 1512 char buf[2] = { static_cast<char>(0xd0u), take8_32(d)};
hideakitai 0:3f9dbf1e2cb0 1513 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1514 }
hideakitai 0:3f9dbf1e2cb0 1515 } else if(d < (1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1516 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1517 char buf = take8_32(d);
hideakitai 0:3f9dbf1e2cb0 1518 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1519 } else {
hideakitai 0:3f9dbf1e2cb0 1520 if(d < (1<<8)) {
hideakitai 0:3f9dbf1e2cb0 1521 /* unsigned 8 */
hideakitai 0:3f9dbf1e2cb0 1522 char buf[2] = { static_cast<char>(0xccu), take8_32(d)};
hideakitai 0:3f9dbf1e2cb0 1523 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1524 } else if(d < (1<<16)) {
hideakitai 0:3f9dbf1e2cb0 1525 /* unsigned 16 */
hideakitai 0:3f9dbf1e2cb0 1526 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1527 buf[0] = static_cast<char>(0xcdu); _msgpack_store16(&buf[1], static_cast<uint16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1528 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1529 } else {
hideakitai 0:3f9dbf1e2cb0 1530 /* unsigned 32 */
hideakitai 0:3f9dbf1e2cb0 1531 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1532 buf[0] = static_cast<char>(0xceu); _msgpack_store32(&buf[1], static_cast<uint32_t>(d));
hideakitai 0:3f9dbf1e2cb0 1533 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1534 }
hideakitai 0:3f9dbf1e2cb0 1535 }
hideakitai 0:3f9dbf1e2cb0 1536 }
hideakitai 0:3f9dbf1e2cb0 1537
hideakitai 0:3f9dbf1e2cb0 1538 template <typename Stream>
hideakitai 0:3f9dbf1e2cb0 1539 template <typename T>
hideakitai 0:3f9dbf1e2cb0 1540 inline void packer<Stream>::pack_imp_int64(T d)
hideakitai 0:3f9dbf1e2cb0 1541 {
hideakitai 0:3f9dbf1e2cb0 1542 if(d < -(1LL<<5)) {
hideakitai 0:3f9dbf1e2cb0 1543 if(d < -(1LL<<15)) {
hideakitai 0:3f9dbf1e2cb0 1544 if(d < -(1LL<<31)) {
hideakitai 0:3f9dbf1e2cb0 1545 /* signed 64 */
hideakitai 0:3f9dbf1e2cb0 1546 char buf[9];
hideakitai 0:3f9dbf1e2cb0 1547 buf[0] = static_cast<char>(0xd3u); _msgpack_store64(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 1548 append_buffer(buf, 9);
hideakitai 0:3f9dbf1e2cb0 1549 } else {
hideakitai 0:3f9dbf1e2cb0 1550 /* signed 32 */
hideakitai 0:3f9dbf1e2cb0 1551 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1552 buf[0] = static_cast<char>(0xd2u); _msgpack_store32(&buf[1], static_cast<int32_t>(d));
hideakitai 0:3f9dbf1e2cb0 1553 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1554 }
hideakitai 0:3f9dbf1e2cb0 1555 } else {
hideakitai 0:3f9dbf1e2cb0 1556 if(d < -(1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1557 /* signed 16 */
hideakitai 0:3f9dbf1e2cb0 1558 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1559 buf[0] = static_cast<char>(0xd1u); _msgpack_store16(&buf[1], static_cast<int16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1560 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1561 } else {
hideakitai 0:3f9dbf1e2cb0 1562 /* signed 8 */
hideakitai 0:3f9dbf1e2cb0 1563 char buf[2] = {static_cast<char>(0xd0u), take8_64(d)};
hideakitai 0:3f9dbf1e2cb0 1564 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1565 }
hideakitai 0:3f9dbf1e2cb0 1566 }
hideakitai 0:3f9dbf1e2cb0 1567 } else if(d < (1<<7)) {
hideakitai 0:3f9dbf1e2cb0 1568 /* fixnum */
hideakitai 0:3f9dbf1e2cb0 1569 char buf = take8_64(d);
hideakitai 0:3f9dbf1e2cb0 1570 append_buffer(&buf, 1);
hideakitai 0:3f9dbf1e2cb0 1571 } else {
hideakitai 0:3f9dbf1e2cb0 1572 if(d < (1LL<<16)) {
hideakitai 0:3f9dbf1e2cb0 1573 if(d < (1<<8)) {
hideakitai 0:3f9dbf1e2cb0 1574 /* unsigned 8 */
hideakitai 0:3f9dbf1e2cb0 1575 char buf[2] = {static_cast<char>(0xccu), take8_64(d)};
hideakitai 0:3f9dbf1e2cb0 1576 append_buffer(buf, 2);
hideakitai 0:3f9dbf1e2cb0 1577 } else {
hideakitai 0:3f9dbf1e2cb0 1578 /* unsigned 16 */
hideakitai 0:3f9dbf1e2cb0 1579 char buf[3];
hideakitai 0:3f9dbf1e2cb0 1580 buf[0] = static_cast<char>(0xcdu); _msgpack_store16(&buf[1], static_cast<uint16_t>(d));
hideakitai 0:3f9dbf1e2cb0 1581 append_buffer(buf, 3);
hideakitai 0:3f9dbf1e2cb0 1582 }
hideakitai 0:3f9dbf1e2cb0 1583 } else {
hideakitai 0:3f9dbf1e2cb0 1584 if(d < (1LL<<32)) {
hideakitai 0:3f9dbf1e2cb0 1585 /* unsigned 32 */
hideakitai 0:3f9dbf1e2cb0 1586 char buf[5];
hideakitai 0:3f9dbf1e2cb0 1587 buf[0] = static_cast<char>(0xceu); _msgpack_store32(&buf[1], static_cast<uint32_t>(d));
hideakitai 0:3f9dbf1e2cb0 1588 append_buffer(buf, 5);
hideakitai 0:3f9dbf1e2cb0 1589 } else {
hideakitai 0:3f9dbf1e2cb0 1590 /* unsigned 64 */
hideakitai 0:3f9dbf1e2cb0 1591 char buf[9];
hideakitai 0:3f9dbf1e2cb0 1592 buf[0] = static_cast<char>(0xcfu); _msgpack_store64(&buf[1], d);
hideakitai 0:3f9dbf1e2cb0 1593 append_buffer(buf, 9);
hideakitai 0:3f9dbf1e2cb0 1594 }
hideakitai 0:3f9dbf1e2cb0 1595 }
hideakitai 0:3f9dbf1e2cb0 1596 }
hideakitai 0:3f9dbf1e2cb0 1597 }
hideakitai 0:3f9dbf1e2cb0 1598
hideakitai 0:3f9dbf1e2cb0 1599 /// @cond
hideakitai 0:3f9dbf1e2cb0 1600 } // MSGPACK_API_VERSION_NAMESPACE(v1)
hideakitai 0:3f9dbf1e2cb0 1601 /// @endcond
hideakitai 0:3f9dbf1e2cb0 1602
hideakitai 0:3f9dbf1e2cb0 1603 } // namespace msgpack
hideakitai 0:3f9dbf1e2cb0 1604
hideakitai 0:3f9dbf1e2cb0 1605 #endif /* msgpack/pack.hpp */