Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
84 lines
2.0 KiB
C++
84 lines
2.0 KiB
C++
#ifndef _SERIALIZER_H_
|
|
#define _SERIALIZER_H_
|
|
|
|
#include <bitset>
|
|
|
|
// Àü¹æ ÂüÁ¶
|
|
class CSendStream;
|
|
|
|
class CSerializer
|
|
{
|
|
protected:
|
|
|
|
enum Flags
|
|
{
|
|
INVALID_READ = (1 << 0),
|
|
INVALID_WRITE = (1 << 1),
|
|
ALLOC_INTERNAL_BUFFER = (1 << 2)
|
|
};
|
|
|
|
public:
|
|
|
|
CSerializer(char* szBuffer, unsigned long nBufferSize);
|
|
CSerializer(CSendStream& SendStream, unsigned long nBufferSize);
|
|
CSerializer(unsigned long nBufferSize);
|
|
|
|
~CSerializer();
|
|
|
|
bool IsValid() { return (NULL != m_szBuffer && !m_Flags[INVALID_READ] && !m_Flags[INVALID_WRITE]); }
|
|
|
|
const char* GetRawBufferPtr() const { return m_szBuffer; }
|
|
|
|
char* GetReadPtr() const { return m_szBuffer + m_nReadSize; }
|
|
char* GetWritePtr() const { return m_szBuffer + m_nWriteSize; }
|
|
|
|
unsigned int GetWriteSize() const { return m_nWriteSize; }
|
|
unsigned int GetReadSize() const { return m_nReadSize; }
|
|
int GetRemainSize() const { return m_nBufferSize - m_nWriteSize; }
|
|
|
|
template<typename T> CSerializer& operator << (T Data)
|
|
{
|
|
if(NULL != m_szBuffer && m_nWriteSize + sizeof(T) <= m_nBufferSize)
|
|
{
|
|
memcpy(m_szBuffer + m_nWriteSize, &Data, sizeof(T));
|
|
m_nWriteSize += sizeof(T);
|
|
}
|
|
else
|
|
{
|
|
m_Flags[INVALID_WRITE] = true;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
template<typename T> CSerializer& operator >> (T& Data)
|
|
{
|
|
if(NULL != m_szBuffer && m_nReadSize + sizeof(T) <= m_nBufferSize)
|
|
{
|
|
memcpy(&Data, m_szBuffer + m_nReadSize, sizeof(T))
|
|
m_nReadSize += sizeof(T);
|
|
}
|
|
else
|
|
{
|
|
m_Flags[INVALID_READ] = true;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
bool PutBuffer(const void* Data, unsigned long nLength);
|
|
bool GetBuffer(const void* Data, unsigned long nLength);
|
|
|
|
private:
|
|
|
|
char* m_szBuffer;
|
|
unsigned long m_nBufferSize;
|
|
unsigned long m_nReadSize;
|
|
unsigned long m_nWriteSize;
|
|
|
|
std::bitset<32> m_Flags;
|
|
};
|
|
|
|
|
|
|
|
#endif |