JD2022-TU1/main/extern/dtest/dtcore/inc/dtstreambinaryoutput.h

109 lines
4.1 KiB
C++

#pragma once
#include "dtcore/inc/dtstream.h"
namespace dt
{
class StreamBinaryOutput : public Stream
{
public:
DT_CORE_DLL_ENTRY StreamBinaryOutput(ByteBuffer* target);
DT_CORE_DLL_ENTRY StreamBinaryOutput(const StreamBinaryOutput& rhs);
DT_CORE_DLL_ENTRY StreamBinaryOutput& operator=(const StreamBinaryOutput& rhs);
DT_CORE_DLL_ENTRY virtual void SerializeBinary(const ByteBuffer& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeBinary(ByteBuffer& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeString(const String& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeString(String& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(S8& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const S8& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(S16& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const S16& data)override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const S32& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(S32& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const S64& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(S64& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(U8& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const U8& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(U16& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const U16& data)override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const U32& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(U32& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const U64& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(U64& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(float& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const float& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(double& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const double& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeBool(bool& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeBool(const bool& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeSize(int& data) override;
DT_CORE_DLL_ENTRY virtual void SerializeSize(const int& data) override;
DT_CORE_DLL_ENTRY virtual bool SerializeMember(const char* name) override;
DT_CORE_DLL_ENTRY virtual void SerializeKey(const String& name) override;
DT_CORE_DLL_ENTRY virtual void SerializeKey(String& name) override;
DT_CORE_DLL_ENTRY virtual void SerializeVersion(U8& data) override;
DT_CORE_DLL_ENTRY virtual void ObjectStart(const void* pointer) override;
DT_CORE_DLL_ENTRY virtual void ObjectEnd(const void* pointer) override;
DT_CORE_DLL_ENTRY virtual void ListStart(const void* pointer) override;
DT_CORE_DLL_ENTRY virtual void ListEnd(const void* pointer) override;
DT_CORE_DLL_ENTRY virtual bool IsInput() const override;
private:
struct Member
{
Member(const char* name, int pos)
: m_Name(name)
, m_Pos(pos)
{}
const char* m_Name;
S32 m_Pos;
};
typedef Vector<Member> Members;
struct Scope
{
Scope(const void* pointer, int pos)
:m_Pointer(pointer)
,m_Position(pos)
,m_Key(nullptr)
,m_Members()
{}
const void* m_Pointer;
int m_Position;
const char* m_Key;
Members m_Members;
};
Vector<Scope> m_ScopeStack;
ByteBuffer* m_Target;
void Reserve(int size);
Scope& GetTopScope();
template <typename T> void SerializeInteger(T& data);
void SerializeType(StreamType t);
};
}