// CDataStream.h: interface for the CDataStream class. // ////////////////////////////////////////////////////////////////////// #ifndef _CDATASTREAM_H_ #define _CDATASTREAM_H_ #ifdef _WINDOWS64 #ifdef PUB_TOOLS_EXPORTS #define PUB_TOOLS_API __declspec(dllexport) #else #define PUB_TOOLS_API __declspec(dllimport) #endif #else #define PUB_TOOLS_API #endif #include "common_types.h" #include "CCharArray.h" #include struct Keyid { int record_id; short column_id; }; typedef unsigned char byte; const int DATASTREAM_NOT_CHECK = -1; //不检查传入串的长度 const int DEFAULT_DATASTREAM_LENGTH = 255; //默认数据的长度应该大于零 typedef struct Keyid TKEYID; #define ERRMSG_LENGTH 255 class PUB_TOOLS_API CDataStream { public: CDataStream(); ~CDataStream(); bool Init(int nMode, bool bAutoDel = true, char *pDataStream = NULL, int nDataStreamLen = 0, int nDefaultDataStreamLen = DEFAULT_DATASTREAM_LENGTH); enum { load = 0, store = 1 }; CDataStream& operator=(const CDataStream & strobj); CDataStream(const CDataStream & strobj); private: int m_nMode; char *m_pDataStream; int m_nDataStreamLen; int m_nDataStreamIndex; int m_nDefaultDataStreanLen; //默认的数据缓冲区的长度 bool m_bAutoDelete; //是否删除缓冲区的数据 bool m_bChangeOrder; char m_chMsg[ERRMSG_LENGTH + 1]; private: bool GetIsAutoDelete() { return m_bAutoDelete; } bool IsOutofBound(int nLen); int GetDataLen(); bool SetData(void *pData, int nLen); bool GetData(void *pData, int nLen); //exception * GetException(char *pMsg); void SetErrMsg(char * pMsg); char * GetErrMsg(); void ChangeOrder(short &s); void ChangeOrder(unsigned short &s); void ChangeOrder(int &i); void ChangeOrder(cmnInt64 &l); void ChangeOrder(float &f); void ChangeOrder(double &d); void ChangeOrder(cmnUint64 &dw); public: bool IsChangeOrder() { return m_bChangeOrder; } int GetDataStreamLen() { return m_nDataStreamIndex; } void IsAutoDelete(bool bAutoDelete = true) { m_bAutoDelete = bAutoDelete; } void Skip(int nLen); void SkipTo(int nLen); operator char *(); CDataStream & operator <<(char ch); CDataStream & operator <<(byte by); CDataStream & operator <<(bool b); CDataStream & operator <<(short s); CDataStream & operator <<(unsigned short s); CDataStream & operator <<(int Integer); CDataStream & operator <<(cmnInt64 l); CDataStream & operator <<(float f); CDataStream & operator <<(double d); CDataStream & operator <<(cmnUint64 dw); CDataStream & operator <<(CCharArray & CharArray); CDataStream & operator <<(TKEYID & keyid); CDataStream & operator >>(char &ch); CDataStream & operator >>(byte &by); CDataStream & operator >>(bool &b); CDataStream & operator >>(short &s); CDataStream & operator >>(unsigned short &s); CDataStream & operator >>(int &Integer); CDataStream & operator >>(cmnInt64 &l); CDataStream & operator >>(float &f); CDataStream & operator >>(double &d); CDataStream & operator >>(cmnUint64 &dw); CDataStream & operator >>(CCharArray & CharArray); CDataStream & operator >>(TKEYID & keyid); }; #endif // _CDataStream_H_