Пример #1
0
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();
}
Пример #2
0
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);
            }
        }
    }
}