#ifndef		__XTOOL_BINARY_H__
#define		__XTOOL_BINARY_H__
#include <string>
#include <functional>
#ifndef _COCOS
#define _COCOS    1
#endif

#define ASSERT_EX(x)	
class  CBinary
{
public:
	CBinary();
	CBinary(uint16_t iLength); 
	CBinary(const CBinary& binData); 
	CBinary(const char *pBuffer,uint16_t iLength);
	CBinary(uint8_t *pBuffer,uint16_t iLength);
	~CBinary();
public:
	void Init(const void *pBuffer,uint16_t iLength);
	void operator = (const CBinary& binData);
	CBinary& operator +=(const CBinary& binData);
	CBinary& operator +=(uint8_t ucNewElement);
	CBinary operator +(const CBinary& binData);
	CBinary operator +(uint8_t ucNewElement);
	uint8_t operator [] (uint16_t nIndex) const;
	uint8_t& operator [] (uint16_t nIndex);
	bool operator < (const CBinary& binData);
	bool operator <= (const CBinary& binData);
	bool operator >= (const CBinary& binData);
	bool operator > (const CBinary& binData);
	bool operator == (const CBinary& binData);
	uint8_t GetAt(uint16_t nIndex);
	void SetAt(uint16_t nIndex,uint8_t ucNewElement);
	void RemoveAt(uint16_t nIndex,uint16_t nCount=1);
	void InsertAt(uint16_t nIndex,uint8_t ucNewElement,uint16_t nCount=1);
	void Add(uint8_t ucNewElement);
	void Empty();

	bool IsEmpty();
	uint16_t GetSize();
	uint8_t *GetBuffer();
	const char *AsString() const;
	uint16_t ReadBuffer(char *pBuffer,uint16_t iStart=0,uint16_t iLength=0xffff);
	uint16_t ReadBuffer(uint8_t *pBuffer,uint16_t iStart=0,uint16_t iLength=0xffff);
	uint16_t WriteBuffer(const char *pBuffer,uint16_t Length);
	uint16_t WriteBuffer(uint8_t *pBuffer,uint16_t Length);

	void Append(uint8_t *pBuffer,uint16_t iLength);
	void Append(const char *pBuffer,uint16_t iLength);

	uint8_t *m_pData;
	uint16_t m_nSize;
};

#endif
