void mpack_write_tag(mpack_writer_t* writer, mpack_tag_t value) { switch (value.type) { case mpack_type_nil: mpack_write_nil (writer); break; case mpack_type_bool: mpack_write_bool (writer, value.v.b); break; case mpack_type_float: mpack_write_float (writer, value.v.f); break; case mpack_type_double: mpack_write_double(writer, value.v.d); break; case mpack_type_int: mpack_write_int (writer, value.v.i); break; case mpack_type_uint: mpack_write_uint (writer, value.v.u); break; case mpack_type_str: mpack_start_str(writer, value.v.l); break; case mpack_type_bin: mpack_start_bin(writer, value.v.l); break; case mpack_type_ext: mpack_start_ext(writer, value.exttype, value.v.l); break; case mpack_type_array: mpack_start_array(writer, value.v.n); break; case mpack_type_map: mpack_start_map(writer, value.v.n); break; default: mpack_assert(0, "unrecognized type %i", (int)value.type); break; } }
static void pack_test(void) { /*************** Test of pack *****************/ cw_pack_context pc; cmp_ctx_t cc; mpack_writer_t mw; int ii, itemSize; for (ii=0; ii<BUF_Length; ii++) buffer[ii] = 0; /*Load pages in memory*/ uint8_t item[40]; BEFORE_PTEST(cw_pack_nil(&pc)); PTEST("CMP",cmp_write_nil(&cc)); PTEST("MPack", mpack_write_nil(&mw)); PTEST("CWPack", cw_pack_nil(&pc)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, -1)); PTEST("CMP",cmp_write_integer(&cc, -1)); PTEST("MPack", mpack_write_i64(&mw, -1)); PTEST("CWPack", cw_pack_signed(&pc, -1)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, 200)); PTEST("CMP",cmp_write_integer(&cc, 200)); PTEST("MPack", mpack_write_i64(&mw, 200)); PTEST("CWPack", cw_pack_signed(&pc, 200)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, 10000)); PTEST("CMP",cmp_write_integer(&cc, 10000)); PTEST("MPack", mpack_write_i64(&mw, 10000)); PTEST("CWPack", cw_pack_signed(&pc, 10000)); AFTER_PTEST; BEFORE_PTEST(cw_pack_signed(&pc, 100000)); PTEST("CMP",cmp_write_integer(&cc, 100000)); PTEST("MPack", mpack_write_i64(&mw, 100000)); PTEST("CWPack", cw_pack_signed(&pc, 100000)); AFTER_PTEST; BEFORE_PTEST(cw_pack_float(&pc, (float)3.14)); PTEST("CMP",cmp_write_float(&cc, (float)3.14)); PTEST("MPack", mpack_write_float(&mw, (float)3.14)); PTEST("CWPack", cw_pack_float(&pc, (float)3.14)); AFTER_PTEST; BEFORE_PTEST(cw_pack_double(&pc, 3.14)); PTEST("CMP",cmp_write_decimal(&cc, 3.14)); PTEST("MPack", mpack_write_double(&mw, 3.14)); PTEST("CWPack", cw_pack_double(&pc, 3.14)); AFTER_PTEST; BEFORE_PTEST(cw_pack_str(&pc, "Claes",5)); PTEST("CMP",cmp_write_str(&cc, "Claes",5)); PTEST("MPack", mpack_write_str(&mw, "Claes",5)); PTEST("CWPack", cw_pack_str(&pc, "Claes",5)); AFTER_PTEST; BEFORE_PTEST(cw_pack_str(&pc, "Longer string than the other one.",33)); PTEST("CMP",cmp_write_str(&cc, "Longer string than the other one.",33)); PTEST("MPack", mpack_write_str(&mw, "Longer string than the other one.",33)); PTEST("CWPack", cw_pack_str(&pc, "Longer string than the other one.",33)); AFTER_PTEST; }
void mpack_write_utf8_cstr_or_nil(mpack_writer_t* writer, const char* cstr) { if (cstr) mpack_write_utf8_cstr(writer, cstr); else mpack_write_nil(writer); }