messagepack implementation for embedded systems (mbed / arduino)

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 dynamic typing routine
hideakitai 0:3f9dbf1e2cb0 3 *
hideakitai 0:3f9dbf1e2cb0 4 * Copyright (C) 2008-2009 FURUHASHI Sadayuki
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 #include "include/object.h"
hideakitai 0:3f9dbf1e2cb0 11 #include "include/pack.h"
hideakitai 0:3f9dbf1e2cb0 12 #include <stdio.h>
hideakitai 0:3f9dbf1e2cb0 13 #include <string.h>
hideakitai 0:3f9dbf1e2cb0 14
hideakitai 0:3f9dbf1e2cb0 15 #if defined(_MSC_VER)
hideakitai 0:3f9dbf1e2cb0 16 #if _MSC_VER >= 1800
hideakitai 0:3f9dbf1e2cb0 17 #include <inttypes.h>
hideakitai 0:3f9dbf1e2cb0 18 #else
hideakitai 0:3f9dbf1e2cb0 19 #define PRIu64 "I64u"
hideakitai 0:3f9dbf1e2cb0 20 #define PRIi64 "I64i"
hideakitai 0:3f9dbf1e2cb0 21 #define PRIi8 "i"
hideakitai 0:3f9dbf1e2cb0 22 #endif
hideakitai 0:3f9dbf1e2cb0 23 #else
hideakitai 0:3f9dbf1e2cb0 24 #include <inttypes.h>
hideakitai 0:3f9dbf1e2cb0 25 #endif
hideakitai 0:3f9dbf1e2cb0 26
hideakitai 0:3f9dbf1e2cb0 27
hideakitai 0:3f9dbf1e2cb0 28 int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
hideakitai 0:3f9dbf1e2cb0 29 {
hideakitai 0:3f9dbf1e2cb0 30 switch(d.type) {
hideakitai 0:3f9dbf1e2cb0 31 case MSGPACK_OBJECT_NIL:
hideakitai 0:3f9dbf1e2cb0 32 return msgpack_pack_nil(pk);
hideakitai 0:3f9dbf1e2cb0 33
hideakitai 0:3f9dbf1e2cb0 34 case MSGPACK_OBJECT_BOOLEAN:
hideakitai 0:3f9dbf1e2cb0 35 if(d.via.boolean) {
hideakitai 0:3f9dbf1e2cb0 36 return msgpack_pack_true(pk);
hideakitai 0:3f9dbf1e2cb0 37 } else {
hideakitai 0:3f9dbf1e2cb0 38 return msgpack_pack_false(pk);
hideakitai 0:3f9dbf1e2cb0 39 }
hideakitai 0:3f9dbf1e2cb0 40
hideakitai 0:3f9dbf1e2cb0 41 case MSGPACK_OBJECT_POSITIVE_INTEGER:
hideakitai 0:3f9dbf1e2cb0 42 return msgpack_pack_uint64(pk, d.via.u64);
hideakitai 0:3f9dbf1e2cb0 43
hideakitai 0:3f9dbf1e2cb0 44 case MSGPACK_OBJECT_NEGATIVE_INTEGER:
hideakitai 0:3f9dbf1e2cb0 45 return msgpack_pack_int64(pk, d.via.i64);
hideakitai 0:3f9dbf1e2cb0 46
hideakitai 0:3f9dbf1e2cb0 47 case MSGPACK_OBJECT_FLOAT:
hideakitai 0:3f9dbf1e2cb0 48 return msgpack_pack_double(pk, d.via.f64);
hideakitai 0:3f9dbf1e2cb0 49
hideakitai 0:3f9dbf1e2cb0 50 case MSGPACK_OBJECT_STR:
hideakitai 0:3f9dbf1e2cb0 51 {
hideakitai 0:3f9dbf1e2cb0 52 int ret = msgpack_pack_str(pk, d.via.str.size);
hideakitai 0:3f9dbf1e2cb0 53 if(ret < 0) { return ret; }
hideakitai 0:3f9dbf1e2cb0 54 return msgpack_pack_str_body(pk, d.via.str.ptr, d.via.str.size);
hideakitai 0:3f9dbf1e2cb0 55 }
hideakitai 0:3f9dbf1e2cb0 56
hideakitai 0:3f9dbf1e2cb0 57 case MSGPACK_OBJECT_BIN:
hideakitai 0:3f9dbf1e2cb0 58 {
hideakitai 0:3f9dbf1e2cb0 59 int ret = msgpack_pack_bin(pk, d.via.bin.size);
hideakitai 0:3f9dbf1e2cb0 60 if(ret < 0) { return ret; }
hideakitai 0:3f9dbf1e2cb0 61 return msgpack_pack_bin_body(pk, d.via.bin.ptr, d.via.bin.size);
hideakitai 0:3f9dbf1e2cb0 62 }
hideakitai 0:3f9dbf1e2cb0 63
hideakitai 0:3f9dbf1e2cb0 64 case MSGPACK_OBJECT_EXT:
hideakitai 0:3f9dbf1e2cb0 65 {
hideakitai 0:3f9dbf1e2cb0 66 int ret = msgpack_pack_ext(pk, d.via.ext.size, d.via.ext.type);
hideakitai 0:3f9dbf1e2cb0 67 if(ret < 0) { return ret; }
hideakitai 0:3f9dbf1e2cb0 68 return msgpack_pack_ext_body(pk, d.via.ext.ptr, d.via.ext.size);
hideakitai 0:3f9dbf1e2cb0 69 }
hideakitai 0:3f9dbf1e2cb0 70
hideakitai 0:3f9dbf1e2cb0 71 case MSGPACK_OBJECT_ARRAY:
hideakitai 0:3f9dbf1e2cb0 72 {
hideakitai 0:3f9dbf1e2cb0 73 int ret = msgpack_pack_array(pk, d.via.array.size);
hideakitai 0:3f9dbf1e2cb0 74 if(ret < 0) {
hideakitai 0:3f9dbf1e2cb0 75 return ret;
hideakitai 0:3f9dbf1e2cb0 76 }
hideakitai 0:3f9dbf1e2cb0 77 else {
hideakitai 0:3f9dbf1e2cb0 78 msgpack_object* o = d.via.array.ptr;
hideakitai 0:3f9dbf1e2cb0 79 msgpack_object* const oend = d.via.array.ptr + d.via.array.size;
hideakitai 0:3f9dbf1e2cb0 80 for(; o != oend; ++o) {
hideakitai 0:3f9dbf1e2cb0 81 ret = msgpack_pack_object(pk, *o);
hideakitai 0:3f9dbf1e2cb0 82 if(ret < 0) { return ret; }
hideakitai 0:3f9dbf1e2cb0 83 }
hideakitai 0:3f9dbf1e2cb0 84
hideakitai 0:3f9dbf1e2cb0 85 return 0;
hideakitai 0:3f9dbf1e2cb0 86 }
hideakitai 0:3f9dbf1e2cb0 87 }
hideakitai 0:3f9dbf1e2cb0 88
hideakitai 0:3f9dbf1e2cb0 89 case MSGPACK_OBJECT_MAP:
hideakitai 0:3f9dbf1e2cb0 90 {
hideakitai 0:3f9dbf1e2cb0 91 int ret = msgpack_pack_map(pk, d.via.map.size);
hideakitai 0:3f9dbf1e2cb0 92 if(ret < 0) {
hideakitai 0:3f9dbf1e2cb0 93 return ret;
hideakitai 0:3f9dbf1e2cb0 94 }
hideakitai 0:3f9dbf1e2cb0 95 else {
hideakitai 0:3f9dbf1e2cb0 96 msgpack_object_kv* kv = d.via.map.ptr;
hideakitai 0:3f9dbf1e2cb0 97 msgpack_object_kv* const kvend = d.via.map.ptr + d.via.map.size;
hideakitai 0:3f9dbf1e2cb0 98 for(; kv != kvend; ++kv) {
hideakitai 0:3f9dbf1e2cb0 99 ret = msgpack_pack_object(pk, kv->key);
hideakitai 0:3f9dbf1e2cb0 100 if(ret < 0) { return ret; }
hideakitai 0:3f9dbf1e2cb0 101 ret = msgpack_pack_object(pk, kv->val);
hideakitai 0:3f9dbf1e2cb0 102 if(ret < 0) { return ret; }
hideakitai 0:3f9dbf1e2cb0 103 }
hideakitai 0:3f9dbf1e2cb0 104
hideakitai 0:3f9dbf1e2cb0 105 return 0;
hideakitai 0:3f9dbf1e2cb0 106 }
hideakitai 0:3f9dbf1e2cb0 107 }
hideakitai 0:3f9dbf1e2cb0 108
hideakitai 0:3f9dbf1e2cb0 109 default:
hideakitai 0:3f9dbf1e2cb0 110 return -1;
hideakitai 0:3f9dbf1e2cb0 111 }
hideakitai 0:3f9dbf1e2cb0 112 }
hideakitai 0:3f9dbf1e2cb0 113
hideakitai 0:3f9dbf1e2cb0 114
hideakitai 0:3f9dbf1e2cb0 115 void msgpack_object_print(FILE* out, msgpack_object o)
hideakitai 0:3f9dbf1e2cb0 116 {
hideakitai 0:3f9dbf1e2cb0 117 switch(o.type) {
hideakitai 0:3f9dbf1e2cb0 118 case MSGPACK_OBJECT_NIL:
hideakitai 0:3f9dbf1e2cb0 119 fprintf(out, "nil");
hideakitai 0:3f9dbf1e2cb0 120 break;
hideakitai 0:3f9dbf1e2cb0 121
hideakitai 0:3f9dbf1e2cb0 122 case MSGPACK_OBJECT_BOOLEAN:
hideakitai 0:3f9dbf1e2cb0 123 fprintf(out, (o.via.boolean ? "true" : "false"));
hideakitai 0:3f9dbf1e2cb0 124 break;
hideakitai 0:3f9dbf1e2cb0 125
hideakitai 0:3f9dbf1e2cb0 126 case MSGPACK_OBJECT_POSITIVE_INTEGER:
hideakitai 0:3f9dbf1e2cb0 127 #if defined(PRIu64)
hideakitai 0:3f9dbf1e2cb0 128 fprintf(out, "%" PRIu64, o.via.u64);
hideakitai 0:3f9dbf1e2cb0 129 #else
hideakitai 0:3f9dbf1e2cb0 130 if (o.via.u64 > ULONG_MAX)
hideakitai 0:3f9dbf1e2cb0 131 fprintf(out, "over 4294967295");
hideakitai 0:3f9dbf1e2cb0 132 else
hideakitai 0:3f9dbf1e2cb0 133 fprintf(out, "%lu", (unsigned long)o.via.u64);
hideakitai 0:3f9dbf1e2cb0 134 #endif
hideakitai 0:3f9dbf1e2cb0 135 break;
hideakitai 0:3f9dbf1e2cb0 136
hideakitai 0:3f9dbf1e2cb0 137 case MSGPACK_OBJECT_NEGATIVE_INTEGER:
hideakitai 0:3f9dbf1e2cb0 138 #if defined(PRIi64)
hideakitai 0:3f9dbf1e2cb0 139 fprintf(out, "%" PRIi64, o.via.i64);
hideakitai 0:3f9dbf1e2cb0 140 #else
hideakitai 0:3f9dbf1e2cb0 141 if (o.via.i64 > LONG_MAX)
hideakitai 0:3f9dbf1e2cb0 142 fprintf(out, "over +2147483647");
hideakitai 0:3f9dbf1e2cb0 143 else if (o.via.i64 < LONG_MIN)
hideakitai 0:3f9dbf1e2cb0 144 fprintf(out, "under -2147483648");
hideakitai 0:3f9dbf1e2cb0 145 else
hideakitai 0:3f9dbf1e2cb0 146 fprintf(out, "%ld", (signed long)o.via.i64);
hideakitai 0:3f9dbf1e2cb0 147 #endif
hideakitai 0:3f9dbf1e2cb0 148 break;
hideakitai 0:3f9dbf1e2cb0 149
hideakitai 0:3f9dbf1e2cb0 150 case MSGPACK_OBJECT_FLOAT:
hideakitai 0:3f9dbf1e2cb0 151 fprintf(out, "%f", o.via.f64);
hideakitai 0:3f9dbf1e2cb0 152 break;
hideakitai 0:3f9dbf1e2cb0 153
hideakitai 0:3f9dbf1e2cb0 154 case MSGPACK_OBJECT_STR:
hideakitai 0:3f9dbf1e2cb0 155 fprintf(out, "\"");
hideakitai 0:3f9dbf1e2cb0 156 fwrite(o.via.str.ptr, o.via.str.size, 1, out);
hideakitai 0:3f9dbf1e2cb0 157 fprintf(out, "\"");
hideakitai 0:3f9dbf1e2cb0 158 break;
hideakitai 0:3f9dbf1e2cb0 159
hideakitai 0:3f9dbf1e2cb0 160 case MSGPACK_OBJECT_BIN:
hideakitai 0:3f9dbf1e2cb0 161 fprintf(out, "\"");
hideakitai 0:3f9dbf1e2cb0 162 fwrite(o.via.bin.ptr, o.via.bin.size, 1, out);
hideakitai 0:3f9dbf1e2cb0 163 fprintf(out, "\"");
hideakitai 0:3f9dbf1e2cb0 164 break;
hideakitai 0:3f9dbf1e2cb0 165
hideakitai 0:3f9dbf1e2cb0 166 case MSGPACK_OBJECT_EXT:
hideakitai 0:3f9dbf1e2cb0 167 #if defined(PRIi8)
hideakitai 0:3f9dbf1e2cb0 168 fprintf(out, "(ext: %" PRIi8 ")", o.via.ext.type);
hideakitai 0:3f9dbf1e2cb0 169 #else
hideakitai 0:3f9dbf1e2cb0 170 fprintf(out, "(ext: %d)", (int)o.via.ext.type);
hideakitai 0:3f9dbf1e2cb0 171 #endif
hideakitai 0:3f9dbf1e2cb0 172 fprintf(out, "\"");
hideakitai 0:3f9dbf1e2cb0 173 fwrite(o.via.ext.ptr, o.via.ext.size, 1, out);
hideakitai 0:3f9dbf1e2cb0 174 fprintf(out, "\"");
hideakitai 0:3f9dbf1e2cb0 175 break;
hideakitai 0:3f9dbf1e2cb0 176
hideakitai 0:3f9dbf1e2cb0 177 case MSGPACK_OBJECT_ARRAY:
hideakitai 0:3f9dbf1e2cb0 178 fprintf(out, "[");
hideakitai 0:3f9dbf1e2cb0 179 if(o.via.array.size != 0) {
hideakitai 0:3f9dbf1e2cb0 180 msgpack_object* p = o.via.array.ptr;
hideakitai 0:3f9dbf1e2cb0 181 msgpack_object* const pend = o.via.array.ptr + o.via.array.size;
hideakitai 0:3f9dbf1e2cb0 182 msgpack_object_print(out, *p);
hideakitai 0:3f9dbf1e2cb0 183 ++p;
hideakitai 0:3f9dbf1e2cb0 184 for(; p < pend; ++p) {
hideakitai 0:3f9dbf1e2cb0 185 fprintf(out, ", ");
hideakitai 0:3f9dbf1e2cb0 186 msgpack_object_print(out, *p);
hideakitai 0:3f9dbf1e2cb0 187 }
hideakitai 0:3f9dbf1e2cb0 188 }
hideakitai 0:3f9dbf1e2cb0 189 fprintf(out, "]");
hideakitai 0:3f9dbf1e2cb0 190 break;
hideakitai 0:3f9dbf1e2cb0 191
hideakitai 0:3f9dbf1e2cb0 192 case MSGPACK_OBJECT_MAP:
hideakitai 0:3f9dbf1e2cb0 193 fprintf(out, "{");
hideakitai 0:3f9dbf1e2cb0 194 if(o.via.map.size != 0) {
hideakitai 0:3f9dbf1e2cb0 195 msgpack_object_kv* p = o.via.map.ptr;
hideakitai 0:3f9dbf1e2cb0 196 msgpack_object_kv* const pend = o.via.map.ptr + o.via.map.size;
hideakitai 0:3f9dbf1e2cb0 197 msgpack_object_print(out, p->key);
hideakitai 0:3f9dbf1e2cb0 198 fprintf(out, "=>");
hideakitai 0:3f9dbf1e2cb0 199 msgpack_object_print(out, p->val);
hideakitai 0:3f9dbf1e2cb0 200 ++p;
hideakitai 0:3f9dbf1e2cb0 201 for(; p < pend; ++p) {
hideakitai 0:3f9dbf1e2cb0 202 fprintf(out, ", ");
hideakitai 0:3f9dbf1e2cb0 203 msgpack_object_print(out, p->key);
hideakitai 0:3f9dbf1e2cb0 204 fprintf(out, "=>");
hideakitai 0:3f9dbf1e2cb0 205 msgpack_object_print(out, p->val);
hideakitai 0:3f9dbf1e2cb0 206 }
hideakitai 0:3f9dbf1e2cb0 207 }
hideakitai 0:3f9dbf1e2cb0 208 fprintf(out, "}");
hideakitai 0:3f9dbf1e2cb0 209 break;
hideakitai 0:3f9dbf1e2cb0 210
hideakitai 0:3f9dbf1e2cb0 211 default:
hideakitai 0:3f9dbf1e2cb0 212 // FIXME
hideakitai 0:3f9dbf1e2cb0 213 #if defined(PRIu64)
hideakitai 0:3f9dbf1e2cb0 214 fprintf(out, "#<UNKNOWN %i %" PRIu64 ">", o.type, o.via.u64);
hideakitai 0:3f9dbf1e2cb0 215 #else
hideakitai 0:3f9dbf1e2cb0 216 if (o.via.u64 > ULONG_MAX)
hideakitai 0:3f9dbf1e2cb0 217 fprintf(out, "#<UNKNOWN %i over 4294967295>", o.type);
hideakitai 0:3f9dbf1e2cb0 218 else
hideakitai 0:3f9dbf1e2cb0 219 fprintf(out, "#<UNKNOWN %i %lu>", o.type, (unsigned long)o.via.u64);
hideakitai 0:3f9dbf1e2cb0 220 #endif
hideakitai 0:3f9dbf1e2cb0 221
hideakitai 0:3f9dbf1e2cb0 222 }
hideakitai 0:3f9dbf1e2cb0 223 }
hideakitai 0:3f9dbf1e2cb0 224
hideakitai 0:3f9dbf1e2cb0 225 bool msgpack_object_equal(const msgpack_object x, const msgpack_object y)
hideakitai 0:3f9dbf1e2cb0 226 {
hideakitai 0:3f9dbf1e2cb0 227 if(x.type != y.type) { return false; }
hideakitai 0:3f9dbf1e2cb0 228
hideakitai 0:3f9dbf1e2cb0 229 switch(x.type) {
hideakitai 0:3f9dbf1e2cb0 230 case MSGPACK_OBJECT_NIL:
hideakitai 0:3f9dbf1e2cb0 231 return true;
hideakitai 0:3f9dbf1e2cb0 232
hideakitai 0:3f9dbf1e2cb0 233 case MSGPACK_OBJECT_BOOLEAN:
hideakitai 0:3f9dbf1e2cb0 234 return x.via.boolean == y.via.boolean;
hideakitai 0:3f9dbf1e2cb0 235
hideakitai 0:3f9dbf1e2cb0 236 case MSGPACK_OBJECT_POSITIVE_INTEGER:
hideakitai 0:3f9dbf1e2cb0 237 return x.via.u64 == y.via.u64;
hideakitai 0:3f9dbf1e2cb0 238
hideakitai 0:3f9dbf1e2cb0 239 case MSGPACK_OBJECT_NEGATIVE_INTEGER:
hideakitai 0:3f9dbf1e2cb0 240 return x.via.i64 == y.via.i64;
hideakitai 0:3f9dbf1e2cb0 241
hideakitai 0:3f9dbf1e2cb0 242 case MSGPACK_OBJECT_FLOAT:
hideakitai 0:3f9dbf1e2cb0 243 return x.via.f64 == y.via.f64;
hideakitai 0:3f9dbf1e2cb0 244
hideakitai 0:3f9dbf1e2cb0 245 case MSGPACK_OBJECT_STR:
hideakitai 0:3f9dbf1e2cb0 246 return x.via.str.size == y.via.str.size &&
hideakitai 0:3f9dbf1e2cb0 247 memcmp(x.via.str.ptr, y.via.str.ptr, x.via.str.size) == 0;
hideakitai 0:3f9dbf1e2cb0 248
hideakitai 0:3f9dbf1e2cb0 249 case MSGPACK_OBJECT_BIN:
hideakitai 0:3f9dbf1e2cb0 250 return x.via.bin.size == y.via.bin.size &&
hideakitai 0:3f9dbf1e2cb0 251 memcmp(x.via.bin.ptr, y.via.bin.ptr, x.via.bin.size) == 0;
hideakitai 0:3f9dbf1e2cb0 252
hideakitai 0:3f9dbf1e2cb0 253 case MSGPACK_OBJECT_EXT:
hideakitai 0:3f9dbf1e2cb0 254 return x.via.ext.size == y.via.ext.size &&
hideakitai 0:3f9dbf1e2cb0 255 x.via.ext.type == y.via.ext.type &&
hideakitai 0:3f9dbf1e2cb0 256 memcmp(x.via.ext.ptr, y.via.ext.ptr, x.via.ext.size) == 0;
hideakitai 0:3f9dbf1e2cb0 257
hideakitai 0:3f9dbf1e2cb0 258 case MSGPACK_OBJECT_ARRAY:
hideakitai 0:3f9dbf1e2cb0 259 if(x.via.array.size != y.via.array.size) {
hideakitai 0:3f9dbf1e2cb0 260 return false;
hideakitai 0:3f9dbf1e2cb0 261 } else if(x.via.array.size == 0) {
hideakitai 0:3f9dbf1e2cb0 262 return true;
hideakitai 0:3f9dbf1e2cb0 263 } else {
hideakitai 0:3f9dbf1e2cb0 264 msgpack_object* px = x.via.array.ptr;
hideakitai 0:3f9dbf1e2cb0 265 msgpack_object* const pxend = x.via.array.ptr + x.via.array.size;
hideakitai 0:3f9dbf1e2cb0 266 msgpack_object* py = y.via.array.ptr;
hideakitai 0:3f9dbf1e2cb0 267 do {
hideakitai 0:3f9dbf1e2cb0 268 if(!msgpack_object_equal(*px, *py)) {
hideakitai 0:3f9dbf1e2cb0 269 return false;
hideakitai 0:3f9dbf1e2cb0 270 }
hideakitai 0:3f9dbf1e2cb0 271 ++px;
hideakitai 0:3f9dbf1e2cb0 272 ++py;
hideakitai 0:3f9dbf1e2cb0 273 } while(px < pxend);
hideakitai 0:3f9dbf1e2cb0 274 return true;
hideakitai 0:3f9dbf1e2cb0 275 }
hideakitai 0:3f9dbf1e2cb0 276
hideakitai 0:3f9dbf1e2cb0 277 case MSGPACK_OBJECT_MAP:
hideakitai 0:3f9dbf1e2cb0 278 if(x.via.map.size != y.via.map.size) {
hideakitai 0:3f9dbf1e2cb0 279 return false;
hideakitai 0:3f9dbf1e2cb0 280 } else if(x.via.map.size == 0) {
hideakitai 0:3f9dbf1e2cb0 281 return true;
hideakitai 0:3f9dbf1e2cb0 282 } else {
hideakitai 0:3f9dbf1e2cb0 283 msgpack_object_kv* px = x.via.map.ptr;
hideakitai 0:3f9dbf1e2cb0 284 msgpack_object_kv* const pxend = x.via.map.ptr + x.via.map.size;
hideakitai 0:3f9dbf1e2cb0 285 msgpack_object_kv* py = y.via.map.ptr;
hideakitai 0:3f9dbf1e2cb0 286 do {
hideakitai 0:3f9dbf1e2cb0 287 if(!msgpack_object_equal(px->key, py->key) || !msgpack_object_equal(px->val, py->val)) {
hideakitai 0:3f9dbf1e2cb0 288 return false;
hideakitai 0:3f9dbf1e2cb0 289 }
hideakitai 0:3f9dbf1e2cb0 290 ++px;
hideakitai 0:3f9dbf1e2cb0 291 ++py;
hideakitai 0:3f9dbf1e2cb0 292 } while(px < pxend);
hideakitai 0:3f9dbf1e2cb0 293 return true;
hideakitai 0:3f9dbf1e2cb0 294 }
hideakitai 0:3f9dbf1e2cb0 295
hideakitai 0:3f9dbf1e2cb0 296 default:
hideakitai 0:3f9dbf1e2cb0 297 return false;
hideakitai 0:3f9dbf1e2cb0 298 }
hideakitai 0:3f9dbf1e2cb0 299 }