#include "stdafx.h" #include "Serializer.h" CSerializer::CSerializer() { /* code */ } CSerializer::~CSerializer() { /* code */ } int CSerializer::SerializedInt32(int& i, void* pBuffer, int size) { /* code */ if (size < sizeof(int)) { return -1; } memcpy(pBuffer, &i, sizeof(int)); return sizeof(int); } int CSerializer::SerializedInt64(__int64& i, void* pBuffer, int size) { /* code */ if (size < sizeof(__int64)) { return -1; } memcpy(pBuffer, &i, sizeof(__int64)); return sizeof(__int64); } int CSerializer::SerializedFloat(float& f, void* pBuffer, int size) { /* code */ if (size < sizeof(float)) { return -1; } memcpy(pBuffer, &f, sizeof(float)); return sizeof(float); } int CSerializer::SerializedDouble(double& d, void* pBuffer, int size) { /* code */ if (size < sizeof(double)) { return -1; } memcpy(pBuffer, &d, sizeof(double)); return sizeof(double); } int CSerializer::SerializedBuffer(void*pScrBuffer, int scrSize, void* pBuffer, int size) { /* code */ if (size < scrSize) { return -1; } memcpy(pBuffer, pScrBuffer, scrSize); return scrSize; } int CSerializer::SerializedString(std::string& str, void* pBuffer, int size) { /* code */ char* pTemp = (char*)pBuffer; int remainSize = size; int len = (int)(str.length()); int nRet1 = SerializedInt32(len, pTemp, remainSize); if (nRet1 < 0) { return nRet1; } pTemp += nRet1; remainSize -= nRet1; int nRet2 = SerializedBuffer((void*)str.c_str(), len, pTemp, remainSize); if (nRet2 < 0) { return nRet2; } return nRet1 + nRet2; } int CSerializer::SerializedHobject(HalconCpp::HObject& hObject, void* pBuffer, int size) { /*code */ char* pTemp = (char*)pBuffer; int remainSize = size; HalconCpp::HTuple hPoint, hSize; HalconCpp::HTuple hSerializedItem; HalconCpp::SerializeObject(hObject, &hSerializedItem); HalconCpp::GetSerializedItemPtr(hSerializedItem, &hPoint, &hSize); int len = hSize[0].I(); int nRet1 = SerializedInt32(len, pTemp, remainSize); if (nRet1 < 0) { HalconCpp::ClearSerializedItem(hSerializedItem); return nRet1; } pTemp += nRet1; remainSize -= nRet1; if (remainSize < hSize[0].I()) { HalconCpp::ClearSerializedItem(hSerializedItem); return -1; } memcpy(pTemp, (void*)hPoint.L(), hSize[0].I()); return nRet1 + hSize[0].I(); } int CSerializer::DeserializedInt32(int& i, void* pBuffer, int size) { /* code */ if (size < sizeof(int)) { return -1; } memcpy(&i, pBuffer, sizeof(int)); return sizeof(int); } int CSerializer::DeserializedInt64(__int64& i, void* pBuffer, int size) { /* code */ if (size < sizeof(__int64)) { return -1; } memcpy(&i, pBuffer, sizeof(__int64)); return sizeof(__int64); } int CSerializer::DeserializedFloat(float& f, void* pBuffer, int size) { /* code */ if (size < sizeof(float)) { return -1; } memcpy(&f, pBuffer, sizeof(float)); return sizeof(float); } int CSerializer::DeserializedDouble(double& d, void* pBuffer, int size) { /* code */ if (size < sizeof(double)) { return -1; } memcpy(&d, pBuffer, sizeof(double)); return sizeof(double); } int CSerializer::DeserializedBuffer(void*pTarBuffer, int tarSize, void* pBuffer, int size) { /*code */ if (size < tarSize) { return -1; } memcpy(pTarBuffer, pBuffer, tarSize); return tarSize; } int CSerializer::DeserializedString(std::string& str, void* pBuffer, int size) { /* code */ char* pTemp = (char*)pBuffer; int remainSize = size; int len = 0; int nRet1 = DeserializedInt32(len, pTemp, remainSize); if (nRet1 < 0) { return nRet1; } pTemp += nRet1; remainSize -= nRet1; char* pszTemp = new char[len]; int nRet2 = DeserializedBuffer(pszTemp, len, pTemp, remainSize); if (nRet2 < 0) { delete[] pszTemp; return nRet2; } str.clear(); str.append(pszTemp, len); delete[] pszTemp; return nRet1 + nRet2; } int CSerializer::DeserializedHobject(HalconCpp::HObject& hObject, void* pBuffer, int size) { /* code */ char* pTemp = (char*)pBuffer; int remainSize = size; int len = 0; int nRet1 = DeserializedInt32(len, pTemp, remainSize); if (nRet1 < 0) { return nRet1; } pTemp += nRet1; remainSize -= nRet1; if (remainSize < len) { return nRet1; } HalconCpp::HTuple hSerializedItem; HalconCpp::CreateSerializedItemPtr((__int64)pTemp, len, "false", &hSerializedItem); HalconCpp::DeserializeObject(&hObject, hSerializedItem); return nRet1 + len; }