📄 fwpackdata.h
字号:
/**********************************************************************************
欢迎使用FFB-MOT对象模板V1.1
设计者:龚建兴
Email:fj_gjx@yahoo.com
Phone:0731-4574996
日期 :2003.8.25
**********************************************************************************/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef FWPACKDATA_H_
#define FWPACKDATA_H_
#include <string>
#include <vector>
class CFWPackData
{
protected:
enum{sizeOfBuffer = 4096}; //预定义的缓冲区大小单位
unsigned long curSize; //当前分配的缓冲区大小
unsigned long sizeOfData; //实际包的数据大小
unsigned long offset; //当前写过的指针位置与缓冲区起始位置的偏移量
std::vector<void*> BufferArray; //存储所有已分配的缓冲区的指针
std::vector<unsigned long> usedSize; //存储所有已使用的缓冲区大小
char* pCurBuffer; //当前缓冲区的写指针
char* pOutBuffer; //输出包的缓冲区指针
public:
CFWPackData();
~CFWPackData();
//member functions
virtual void PackBasicData(void *packData, unsigned long lenOfData);
virtual void UnpackBasicData(char *in, void *unpackData, unsigned long lenOfData);
virtual char *PackStringData(std::string packData);
virtual char *PackMulStringData(std::vector<std::string> packData);
virtual char *PackMulStringData(std::string packData[], unsigned long num);
virtual void UnpackMulStringData(char *in, std::vector<std::string> &unpackData, unsigned long lenOfData);
virtual void UnpackMulStringData(char *in, std::string unpackData[], unsigned long lenOfData, unsigned long num);
virtual void ReAllocBuffer(unsigned long lenOfData);
virtual bool IfReAlloc(unsigned long lenOfData);
virtual void ClearPack();
virtual char *GetBufData();
virtual unsigned long GetDirtySize();
virtual void SaveDirty();
};
#endif //FWPACKDATA_H_
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//{{FW_DATA_PACKING_BEGIN
#define DECLARE_PACKINGANDUNPACKING_CLASS_OFOBJECT \
CFWPackData m_Pack;
#define DECLARE_PACKINGANDUNPACKING_CLASS_OFINTERACTION \
CFWPackData m_Pack;
#define DECLARE_PACKINGANDUNPACKING_CLASS_OFCOMPLEX \
CFWPackData m_Pack; \
inline unsigned long GetSizeOfData() \
{ \
return m_Pack.GetDirtySize(); \
} \
inline void ClearPack() \
{ \
m_Pack.ClearPack(); \
}
#define PackStringArray(theAdd, data, id); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
charbuffer = m_Pack.PackMulStringData(data); \
numOfData = m_Pack.GetDirtySize(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackStringArray(theGets, data, index); \
{ \
unsigned long numOfData = 0; \
unsigned long num = 0; \
char* charbuffer = NULL; \
numOfData = theGets->getValueLength(index); \
charbuffer = new char[numOfData]; \
theGets->getValue(index, charbuffer, numOfData); \
m_Pack.ClearPack(); \
m_Pack.UnpackMulStringData(charbuffer, data, numOfData); \
m_Pack.ClearPack(); \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackStringFixedSet(theAdd, data, id, num); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
charbuffer = m_Pack.PackMulStringData(data, num); \
numOfData = m_Pack.GetDirtySize(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackStringFixedSet(theGets, data, index, num); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
numOfData = theGets->getValueLength(i); \
charbuffer = new char[numOfData]; \
theGets->getValue(i, charbuffer, numOfData); \
m_Pack.ClearPack(); \
m_Pack.UnpackMulStringData(charbuffer, data, numOfData, num); \
m_Pack.ClearPack(); \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackString(theAdd, data, id); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
charbuffer = m_Pack.PackStringData(data); \
numOfData = m_Pack.GetDirtySize(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackString(theGets, data, index); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
numOfData = theGets->getValueLength(index); \
charbuffer = new char[numOfData]; \
theGets->getValue(index, charbuffer, numOfData); \
data = charbuffer; \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackStruct(theAdd, data, id); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
charbuffer = data.PackData(); \
numOfData = data.GetSizeOfData(); \
m_Pack.ClearPack(); \
m_Pack.PackBasicData((void*)charbuffer, numOfData); \
data.ClearPack(); \
m_Pack.SaveDirty(); \
charbuffer = m_Pack.GetBufData(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackStruct(theGets, data, index); \
{ \
unsigned long numOfData = 0; \
char* charbuffer; \
numOfData = theGets->getValueLength(index); \
charbuffer = new char[numOfData]; \
theGets->getValue(index, charbuffer, numOfData); \
data.UnpackData(charbuffer); \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackStructFixedSet(theAdd, data, id, num); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
m_Pack.ClearPack(); \
for(int k = 0; k < num; k++) { \
charbuffer = data[k].PackData(); \
numOfData = data[k].GetSizeOfData(); \
m_Pack.PackBasicData(&numOfData, sizeof(unsigned long)); \
m_Pack.PackBasicData((void*)charbuffer, numOfData); \
data[k].ClearPack(); \
} \
m_Pack.SaveDirty(); \
numOfData = m_Pack.GetDirtySize(); \
charbuffer = m_Pack.GetBufData(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackStructFixedSet(theGets, data, index, num); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
numOfData = theGets->getValueLength(index); \
charbuffer = new char[numOfData]; \
theGets->getValue(index, charbuffer, numOfData); \
m_Pack.ClearPack(); \
for(int k = 0; k < num; k++) { \
m_Pack.UnpackBasicData(charbuffer, &numOfData, sizeof(unsigned long)); \
char* buffer = new char[numOfData]; \
m_Pack.UnpackBasicData(charbuffer, (void*)buffer, numOfData); \
data[k].UnpackData(buffer); \
delete[] buffer; \
buffer = NULL; \
} \
m_Pack.ClearPack(); \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackStructArray(theAdd, data, id); \
{ \
unsigned long numOfData = 0; \
unsigned long num = 0; \
char* charbuffer = NULL; \
num = data.size(); \
m_Pack.ClearPack(); \
m_Pack.PackBasicData(&num, sizeof(unsigned long)); \
for(int k = 0; k < num; k++) { \
charbuffer = data[k].PackData(); \
numOfData = data[k].GetSizeOfData(); \
m_Pack.PackBasicData(&numOfData, sizeof(unsigned long)); \
m_Pack.PackBasicData((void*)charbuffer, numOfData); \
data[k].ClearPack(); \
} \
m_Pack.SaveDirty(); \
numOfData = m_Pack.GetDirtySize(); \
charbuffer = m_Pack.GetBufData(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackStructArray(theGets, data, index); \
{ \
unsigned long numOfData = 0; \
unsigned long num = 0; \
char* charbuffer = NULL; \
numOfData = theGets->getValueLength(index); \
charbuffer = new char[numOfData]; \
theGets->getValue(index, charbuffer, numOfData); \
m_Pack.ClearPack(); \
m_Pack.UnpackBasicData(charbuffer, &num, sizeof(unsigned long)); \
data.resize(num); \
for(int k = 0; k < num; k++) { \
m_Pack.UnpackBasicData(charbuffer, &numOfData, sizeof(unsigned long)); \
char* buffer = new char[numOfData]; \
m_Pack.UnpackBasicData(charbuffer, (void*)buffer, numOfData); \
data[k].UnpackData(buffer); \
delete[] buffer; \
buffer = NULL; \
} \
m_Pack.ClearPack(); \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackBasicFixedSet(theAdd, data, id, num, sizeType); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
m_Pack.ClearPack(); \
for(int k = 0; k < num; k++) { \
m_Pack.PackBasicData(&data[k], sizeType); \
} \
m_Pack.SaveDirty(); \
numOfData = m_Pack.GetDirtySize(); \
charbuffer = m_Pack.GetBufData(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackBasicFixedSet(theGets, data, index, num, sizeType); \
{ \
unsigned long numOfData = 0; \
char* charbuffer = NULL; \
numOfData = theGets->getValueLength(index); \
charbuffer = new char[numOfData]; \
theGets->getValue(index, charbuffer, numOfData); \
m_Pack.ClearPack(); \
for(int k = 0; k < num; k++) { \
m_Pack.UnpackBasicData(charbuffer, &data[k], sizeType); \
} \
m_Pack.ClearPack(); \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackBasicArray(theAdd, data, id, sizeType); \
{ \
unsigned long numOfData = 0; \
unsigned long num = 0; \
char* charbuffer = NULL; \
num = data.size(); \
m_Pack.ClearPack(); \
for(int k = 0; k < num; k++) { \
m_Pack.PackBasicData(&data[k], sizeType); \
} \
m_Pack.SaveDirty(); \
numOfData = m_Pack.GetDirtySize(); \
charbuffer = m_Pack.GetBufData(); \
theAdd->add(id, charbuffer, numOfData); \
m_Pack.ClearPack(); \
}
#define UnpackBasicArray(theGets, data, index, sizeType); \
{ \
unsigned long numOfData = 0; \
unsigned long num = 0; \
char* charbuffer = NULL; \
numOfData = theGets->getValueLength(index); \
charbuffer = new char[numOfData]; \
theGets->getValue(index, charbuffer, numOfData); \
m_Pack.ClearPack(); \
num = numOfData / sizeType; \
data.resize(num); \
for(int k = 0; k < num; k++) { \
m_Pack.UnpackBasicData(charbuffer, &data[k], sizeType); \
} \
m_Pack.ClearPack(); \
delete[] charbuffer; \
charbuffer = NULL; \
}
#define PackBasic(theAdd, data, id, sizeType); \
{ \
theAdd->add(id, (const char*)&data, sizeType); \
}
#define UnpackBasic(theGets, data, index); \
{ \
unsigned long valueLength = 0; \
theGets->getValue(index, (char*)&data, valueLength); \
}
#define BEGIN_PACKING_ATTRIBUTES_DATA(pAttributes, theAttrNames) \
{ \
RTI::AttributeHandle theHandle = ATTRNOHANDLE; \
RTI::AttributeHandleValuePairSet* theAdds = pAttributes; \
CString theName = ""; \
ASSERT(theAdds != NULL); \
for(int i = 0; i < theAttrNames.GetSize(); i++) { \
theName = theAttrNames.GetAt(i);
#define PACKING_BASIC_ATTRIBUTEDATA(data, dataName, updateFlag, sizeType) \
if(theName == dataName && updateFlag) { \
theHandle = FindAttributeHandle(dataName); \
ASSERT(theHandle != ATTRNOHANDLE); \
PackBasic(theAdds, data, theHandle, sizeType); \
}
#define PACKING_BASICARRAY_ATTRIBUTEDATA(data, dataName, updateFlag, sizeType) \
if(theName == dataName && updateFlag) { \
theHandle = FindAttributeHandle(dataName); \
ASSERT(theHandle != ATTRNOHANDLE); \
PackBasicArray(theAdds, data, theHandle, sizeType); \
}
#define PACKING_BASICFIXEDSET_ATTRIBUTEDATA(data, dataName, updateFlag, num, sizeType) \
if(theName == dataName && updateFlag) { \
theHandle = FindAttributeHandle(dataName); \
ASSERT(theHandle != ATTRNOHANDLE); \
PackBasicFixedSet(theAdds, data, theHandle, num, sizeType); \
}
#define PACKING_STRUCT_ATTRIBUTEDATA(data, dataName, updateFlag) \
if(theName == dataName && updateFlag) { \
theHandle = FindAttributeHandle(dataName); \
ASSERT(theHandle != ATTRNOHANDLE); \
PackStruct(theAdds, data, theHandle); \
}
#define PACKING_STRUCTARRAY_ATTRIBUTEDATA(data, dataName, updateFlag) \
if(theName == dataName && updateFlag) { \
theHandle = FindAttributeHandle(dataName); \
ASSERT(theHandle != ATTRNOHANDLE); \
PackStructArray(theAdds, data, theHandle); \
}
#define PACKING_STRUCTFIXEDSET_ATTRIBUTEDATA(data, dataName, updateFlag, num) \
if(theName == dataName && updateFlag) { \
theHandle = FindAttributeHandle(dataName); \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -