114 lines
4.2 KiB
C++
114 lines
4.2 KiB
C++
#pragma once
|
|
|
|
#include "dtcore/inc/dtstream.h"
|
|
|
|
namespace dt
|
|
{
|
|
|
|
class StreamBinaryInput : public Stream
|
|
{
|
|
public:
|
|
DT_CORE_DLL_ENTRY StreamBinaryInput(const void* data, int size);
|
|
|
|
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(const S8& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(S8& data) override;
|
|
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const S16& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(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(const U8& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(U8& data) override;
|
|
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const U16& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(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(const float& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(float& data) override;
|
|
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(const double& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeNumeral(double& data) override;
|
|
|
|
DT_CORE_DLL_ENTRY virtual void SerializeBool(const bool& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeBool(bool& data) override;
|
|
|
|
DT_CORE_DLL_ENTRY virtual void SerializeSize(const int& data) override;
|
|
DT_CORE_DLL_ENTRY virtual void SerializeSize(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;
|
|
|
|
DT_CORE_DLL_ENTRY bool HasSucceeded() const;
|
|
|
|
DT_CORE_DLL_ENTRY String ToString();
|
|
|
|
private:
|
|
struct Member
|
|
{
|
|
const char* m_Name;
|
|
int m_Pos;
|
|
};
|
|
typedef Vector<Member> Members;
|
|
|
|
struct Scope
|
|
{
|
|
Scope(const void* pointer, int pos)
|
|
: m_Pointer(pointer)
|
|
, m_Position(pos)
|
|
, m_NextMemberIndex(0)
|
|
, m_EndPosition(-1)
|
|
{}
|
|
|
|
const void* m_Pointer;
|
|
int m_Position;
|
|
int m_NextMemberIndex;
|
|
int m_EndPosition;
|
|
Members m_Members;
|
|
};
|
|
Vector<Scope> m_ScopeStack;
|
|
bool m_Success;
|
|
const Byte* m_Buffer;
|
|
int m_Size;
|
|
int m_Position;
|
|
|
|
void SetPosition(int pos);
|
|
void Fail();
|
|
Scope& GetTopScope();
|
|
template <typename T> void SerializeInteger(T& data);
|
|
void SerializeRaw(int size, void* data);
|
|
bool SerializeType(StreamType expectation);
|
|
|
|
StreamType PeekAtType();
|
|
bool ToString(StreamType type, String* out);
|
|
};
|
|
|
|
}
|