#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 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 m_ScopeStack; ByteBuffer* m_Target; void Reserve(int size); Scope& GetTopScope(); template void SerializeInteger(T& data); void SerializeType(StreamType t); }; }