about summary refs log tree commit diff
path: root/src/engine/e_packer.h
blob: 5dc80e7aabed96a6c5707b9bd3fe418e2066ee31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */

class CPacker
{
	enum
	{
		PACKER_BUFFER_SIZE=1024*2
	};

	unsigned char m_aBuffer[PACKER_BUFFER_SIZE];
	unsigned char *m_pCurrent;
	unsigned char *m_pEnd;
	int m_Error;
public:
	void Reset();
	void AddInt(int i);
	void AddString(const char *pStr, int Limit);
	void AddRaw(const unsigned char *pData, int Size);
	
	int Size() const { return (int)(m_pCurrent-m_aBuffer); }
	const unsigned char *Data() const { return m_aBuffer; }
	bool Error() const { return m_Error; }
};

class CUnpacker
{
	const unsigned char *m_pStart;
	const unsigned char *m_pCurrent;
	const unsigned char *m_pEnd;
	int m_Error;
public:
	void Reset(const unsigned char *pData, int Size);
	int GetInt();
	const char *GetString();
	const unsigned char *GetRaw(int Size);
	bool Error() const { return m_Error; }
};