Files
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

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