void TestSerialization::testStreamWrite() { std::ostringstream os(std::ios_base::binary); std::string data; writeU8(os, 0x11); writeU16(os, 0x2233); writeU32(os, 0x44556677); writeU64(os, 0x8899AABBCCDDEEFF); writeS8(os, -128); writeS16(os, 30000); writeS32(os, -6); writeS64(os, -43); writeF1000(os, 53.53467f); writeF1000(os, -300000.32f); writeF1000(os, F1000_MIN); writeF1000(os, F1000_MAX); os << serializeString("foobar!"); data = os.str(); UASSERT(data.size() < sizeof(test_serialized_data)); UASSERT(!memcmp(&data[0], test_serialized_data, data.size())); writeV2S16(os, v2s16(500, 500)); writeV3S16(os, v3s16(4207, 604, -30)); writeV2S32(os, v2s32(1920, 1080)); writeV3S32(os, v3s32(-400, 6400054, 290549855)); writeV2F1000(os, v2f(500.65661f, 350.34567f)); os << serializeWideString(L"\x02~woof~\x5455"); writeV3F1000(os, v3f(500, 10024.2f, -192.54f)); writeARGB8(os, video::SColor(255, 128, 50, 128)); os << serializeLongString("some longer string here"); writeU16(os, 0xF00D); data = os.str(); UASSERT(data.size() == sizeof(test_serialized_data)); UASSERT(!memcmp(&data[0], test_serialized_data, sizeof(test_serialized_data))); }
U32 PGRFBroadcastEventPkt::serialize( S8 * buf, S32 offset ) const { U32 cur_pos = PPacketBase::serialize(buf, offset); S8 * buff = buf + offset; writeU32(buff + cur_pos, m_iPaxosType); cur_pos += sizeof(U32); writeU32(buff + cur_pos, m_iID); cur_pos += sizeof(U32); writeU32(buff + cur_pos, m_iEpoch); cur_pos += sizeof(U32); writeU64(buff + cur_pos, m_lTxid); cur_pos += sizeof(U64); cur_pos += writeString(buff + cur_pos, m_sKey); cur_pos += writeString(buff + cur_pos, m_sValue); return cur_pos; }
void pnVaultNode::write(unsigned char* buffer, size_t size) const { if (size < sizeof(uint64_t)) { plDebug::Error("Invalid node buffer"); return; } writeU64(fDirtyMask, buffer, size); for (size_t bit=0; bit<kNumFields; bit++) { if ((fDirtyMask & (1ULL<<bit)) == 0) continue; switch (bit) { case kNodeIdx: writeU32(fNodeIdx, buffer, size); break; case kCreateTime: writeU32(fCreateTime, buffer, size); break; case kModifyTime: writeU32(fModifyTime, buffer, size); break; case kCreateAgeName: writeString(fCreateAgeName, buffer, size); break; case kCreateAgeUuid: writeUuid(fCreateAgeUuid, buffer, size); break; case kCreatorUuid: writeUuid(fCreatorUuid, buffer, size); break; case kCreatorIdx: writeU32(fCreatorIdx, buffer, size); break; case kNodeType: writeU32(fNodeType, buffer, size); break; case kInt32_1: case kInt32_2: case kInt32_3: case kInt32_4: writeS32(fInt32[bit - kInt32_1], buffer, size); break; case kUint32_1: case kUint32_2: case kUint32_3: case kUint32_4: writeU32(fUint32[bit - kUint32_1], buffer, size); break; case kUuid_1: case kUuid_2: case kUuid_3: case kUuid_4: writeUuid(fUuid[bit - kUuid_1], buffer, size); break; case kString64_1: case kString64_2: case kString64_3: case kString64_4: case kString64_5: case kString64_6: writeString(fString64[bit - kString64_1], buffer, size); break; case kIString64_1: case kIString64_2: writeString(fIString64[bit - kIString64_1], buffer, size); break; case kText_1: case kText_2: writeString(fText[bit - kText_1], buffer, size); break; case kBlob_1: case kBlob_2: writeU32(fBlob[bit - kBlob_1].getSize(), buffer, size); memcpy(buffer, fBlob[bit - kBlob_1].getData(), fBlob[bit - kBlob_1].getSize()); buffer += fBlob[bit - kBlob_1].getSize(); size -= fBlob[bit - kBlob_1].getSize(); break; } } if (size != 0) plDebug::Warning("Node %d is truncated", fNodeIdx); }