void LLBC_Dictionary::SerializeInl(LLBC_Stream &s, bool extended) const { LLBC_STREAM_BEGIN_WRITE(s); LLBC_STREAM_WRITE(static_cast<uint64>(_bucketSize)); LLBC_STREAM_WRITE(static_cast<uint64>(_size)); ConstIter it = this->Begin(), endIt = this->End(); for (; it != endIt; it++) { const LLBC_DictionaryElem *elem = it.Elem(); const uint8 intKeyFlag = elem->IsIntKey() ? 1 : 0; LLBC_STREAM_WRITE(intKeyFlag); if (intKeyFlag) { LLBC_STREAM_WRITE(elem->GetIntKey()); } else { !extended ? s.Write( *elem->GetStrKey()) : s.WriteEx(*elem->GetStrKey()); } !extended ? s.Write(*it) : s.WriteEx(*it); } LLBC_STREAM_END_WRITE(); }
void LLBC_Variant::Serialize(LLBC_Stream &stream) const { stream.Write(_holder.type); if (IsRaw()) { stream.Write(_holder.raw.uint64Val); } else if (IsStr()) { stream.Write(_holder.str); } else if (IsDict()) { if (!_holder.dict) { stream.Write(static_cast<uint32>(0)); } else { stream.Write(static_cast<uint32>(_holder.dict->size())); for (DictConstIter it = _holder.dict->begin(); it != _holder.dict->end(); it ++) { stream.Write(it->first); stream.Write(it->second); } } } }