📄 virtualsavefile.cpp
字号:
break;
}
}
return lngPos;
}
void CVirtualSaveFileBlock::mfReadRecord( BYTEARRAY& buffSrc, long& lngPos, BYTEARRAY& buffDest )
{
for ( int i = lngPos; i < ARRAYSIZE(buffSrc); i++ )
{
long lngSize = 0;
memcpy ( &lngSize, ARRAYDATA(buffSrc)+lngPos, sizeof(long) );
ARRAYRESIZE( buffDest, lngSize );
memcpy( ARRAYDATA(buffDest), ARRAYDATA(buffSrc)+lngPos+sizeof(long), ARRAYSIZE(buffDest) );
lngPos = lngPos + sizeof(long) + lngSize;
break;
}
}
//lzlzlz
bool CVirtualSaveFileBlock::mfGetFieldBuff ( BYTEARRAY& buffSrc, CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*>& listValueBuffer,
STRINGARRAY& arrayStrFilter,
COleDateTime& tBegin,
COleDateTime& tEnd,
COleDateTime& tLast,
time_t& tLast1)
{
CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*> TemplistValueBuffer;
INTARRAY iTempSubScriptArray;
CStringArray strTempArray;
COleDateTime time;
long lngMS = 0;
long lngValue = 0;
float fValue = 0;
CString strValue = _T("");
int iPos = -1;
COleVariant vnt;
int iType = 0;
int iID = 0;
// iID = CENDATA->SvrGetDatID(m_strGroupName, iType);
INTARRAY IDs;
// CENDATA->SvrGetGroupID(iID, IDs);
COwnerArchive ar( COwnerArchive::storing );
ar.SvrWrite( buffSrc );
ar.SvrSeekToBegin();
ar.SvrChangeMode( COwnerArchive::load );
#ifdef _MCGS_OLEDATETIME_
ar >> time;
#else
time_t t;
ar >> t;
time = COleDateTime(t);
#endif
if(time < tBegin || time > tEnd)
{
return false;
}
//获取用户设定时间间隔
int iSize = arrayStrFilter.GetSize();
#ifdef _UNICODE
wchar_t* pEnd;
double fStep = wcstod(arrayStrFilter[iSize - 1], &pEnd);
#else
char* pEnd;
double fStep = strtod(arrayStrFilter[iSize - 1], &pEnd);
#endif
COleDateTimeSpan tStep(fStep / 24 / 3600);
if(time - tLast < tStep)
{
return false;
}
tLast = time;
TemplistValueBuffer.SetSize(ARRAYSIZE(IDs) + 2);
for(int kk = 0; kk < TemplistValueBuffer.GetSize(); kk++)
{
TemplistValueBuffer[kk] = new CList<COleVariant,COleVariant>;
}
vnt = time;
TemplistValueBuffer[0]->AddTail( vnt );
strTempArray.Add(CString(MCGS_TIME_FIELD));
ar >> lngMS;
vnt = lngMS;
TemplistValueBuffer[1]->AddTail( vnt );
strTempArray.Add(CString(MCGS_TIMEMS_FIELD));
/* for (int j = 0; j<ARRAYSIZE(IDs); j++)
{
CString str;
int type;
CENDATA->SvrGetDataName(IDs[j], str);
strTempArray.Add(str);
CENDATA->SvrGetDataType(IDs[j], type);
switch (type)
{
case VSTRING:
{
ar >> strValue;
vnt = strValue;
TemplistValueBuffer[j + 2]->AddTail( vnt );
}
break;
case VSINGLE:
{
ar >> fValue;
vnt = fValue;
TemplistValueBuffer[j + 2]->AddTail( vnt );
}
break;
case VINTEGER:
{
ar >> lngValue;
vnt = lngValue;
TemplistValueBuffer[j + 2]->AddTail( vnt );
}
break;
default:
ASSERT( FALSE );
}
}
*/
int ff = 0;
for(int k = 0; k < arrayStrFilter.GetSize(); k++)
{
for(int ik = 0; ik < strTempArray.GetSize(); ik++)
{
if(arrayStrFilter[k] == strTempArray[ik])
{
POSITION pos = TemplistValueBuffer[ik]->GetHeadPosition();
while(pos)
{
listValueBuffer[ff]->AddTail(TemplistValueBuffer[ik]->GetNext(pos));
}
ff++;
}
}
}
kk = 0;
for(kk = 0; kk < TemplistValueBuffer.GetSize(); kk++)
{
if(TemplistValueBuffer[kk] != NULL)
{
delete TemplistValueBuffer[kk];
TemplistValueBuffer[kk] = NULL;
}
}
return true;
}
//lzlzlz
bool CVirtualSaveFileBlock::mfGetFieldBuffEx ( BYTEARRAY& buffSrc, CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*>& listValueBuffer,
STRINGARRAY& arrayStrFilter,
COleDateTime& tBegin,
COleDateTime& tEnd,
COleDateTime& tLast,
time_t& tLast1)
{
//lzlzlz 2003.6.25
//做进一步的优化
COleDateTime time;
long lngMS = 0;
long lngValue = 0;
float fValue = 0;
CString strValue = _T("");
#ifdef _MCGS_OLEDATETIME_
int iYear, iMonth, iDay, iHour, iMinute, iSecond;
memcpy(&iYear, buffSrc.GetData(), sizeof(int));
memcpy(&iMonth, buffSrc.GetData() + sizeof(int), sizeof(int));
memcpy(&iDay, buffSrc.GetData() + 2 * sizeof(int), sizeof(int));
memcpy(&iHour, buffSrc.GetData() + 3 * sizeof(int), sizeof(int));
memcpy(&iMinute, buffSrc.GetData() + 4 * sizeof(int), sizeof(int));
memcpy(&iSecond, buffSrc.GetData() + 5 * sizeof(int), sizeof(int));
time = COleDateTime ( iYear, iMonth, iDay, iHour, iMinute, iSecond );
#else
time_t t;
memcpy(&t, buffSrc.GetData(), sizeof(time_t));
time = COleDateTime(t);
#endif
//lzlzlz 2003.6.24
//增加简单的查询接口
LPBYTE pPos = buffSrc.GetData() + sizeof(time_t);
memcpy(&lngMS, pPos, sizeof(long));
pPos += sizeof(long);
if(CVirtualInfoFile::m_pDBQuery != NULL)
{
if(CVirtualInfoFile::m_pDBQuery->SvrPrepare(time, lngMS) == false)
{
return false;
}
}
else
{
//缺省的情况
if(time < tBegin || time > tEnd)
{
return false;
}
if(CVirtualInfoFile::m_exStatus == CVirtualInfoFile::MCGS_FORHISPIC)
{
//获取用户设定时间间隔
COleDateTimeSpan tStep(CVirtualInfoFile::m_fStep / 24 / 3600);
if(time - tLast < tStep)
{
return false;
}
}
}
tLast = time;
int iSize = m_pSaveFile->m_pInfoFile->m_GrpObjInfo.GetSize();
COleVariant* pVars = new COleVariant[iSize];
pVars[0] = time;
pVars[1] = lngMS;
DATAOBJSINFO& info = m_pSaveFile->SvrGetGrpObjsInfo();
for (int j = 2; j < iSize; j++)
{
switch (info[j].m_type)
{
case VSTRING:
{
DWORD dwLen = 0;
memcpy(&dwLen, pPos, sizeof(DWORD));
pPos += sizeof(DWORD);
//lzlzlz 2003.6.12
BYTE* pBuff = new BYTE[dwLen + 1];
pBuff[dwLen] = 0;
memcpy(pBuff, pPos, dwLen);
//lzlzlz 2003.6.19
pPos += dwLen;
strValue = pBuff;
delete [] pBuff;
pVars[j] = strValue;
}
break;
case VSINGLE:
{
memcpy(&fValue, pPos, sizeof(float));
pPos += sizeof(float);
pVars[j] = fValue;
}
break;
case VINTEGER:
{
memcpy(&lngValue, pPos, sizeof(long));
pPos += sizeof(long);
pVars[j] = lngValue;
}
break;
default:
ASSERT( FALSE );
}
}
if(CVirtualInfoFile::m_pDBQuery != NULL)
{
if(CVirtualInfoFile::m_pDBQuery->SvrDone(pVars) == false)
{
//不符合条件
delete [] pVars;
return false;
}
}
{
for(int i = 0; i < iSize; i++)
{
listValueBuffer[i]->AddTail(pVars[i]);
}
}
delete [] pVars;
return true;
}
/*
//lzlzlz
bool CVirtualSaveFileBlock::mfGetFieldBuffEx ( BYTEARRAY& buffSrc, CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*>& listValueBuffer,
STRINGARRAY& arrayStrFilter,
COleDateTime& tBegin,
COleDateTime& tEnd,
COleDateTime& tLast,
time_t& tLast1)
{
CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*> TemplistValueBuffer;
INTARRAY iTempSubScriptArray;
CStringArray strTempArray;
COleDateTime time;
long lngMS = 0;
long lngValue = 0;
float fValue = 0;
CString strValue = _T("");
int iPos = -1;
COleVariant vnt;
#ifdef _MCGS_OLEDATETIME_
int iYear, iMonth, iDay, iHour, iMinute, iSecond;
memcpy(&iYear, buffSrc.GetData(), sizeof(int));
memcpy(&iMonth, buffSrc.GetData() + sizeof(int), sizeof(int));
memcpy(&iDay, buffSrc.GetData() + 2 * sizeof(int), sizeof(int));
memcpy(&iHour, buffSrc.GetData() + 3 * sizeof(int), sizeof(int));
memcpy(&iMinute, buffSrc.GetData() + 4 * sizeof(int), sizeof(int));
memcpy(&iSecond, buffSrc.GetData() + 5 * sizeof(int), sizeof(int));
time = COleDateTime ( iYear, iMonth, iDay, iHour, iMinute, iSecond );
#else
time_t t;
memcpy(&t, buffSrc.GetData(), sizeof(time_t));
time = COleDateTime(t);
#endif
if(time < tBegin || time > tEnd)
{
return false;
}
if(CVirtualInfoFile::m_exStatus == CVirtualInfoFile::MCGS_FORHISPIC)
{
//获取用户设定时间间隔
COleDateTimeSpan tStep(CVirtualInfoFile::m_fStep / 24 / 3600);
if(time - tLast < tStep)
{
//return false;
}
}
tLast = time;
INTARRAY& IDs = m_pSaveFile->SvrGetGrpObjIDs();
int iSize = IDs.GetSize();
TemplistValueBuffer.SetSize(iSize + 2);
strTempArray.SetSize(iSize + 2);
for(int kk = 0; kk < iSize + 2; kk++)
{
TemplistValueBuffer[kk] = new CList<COleVariant,COleVariant>;
}
vnt = time;
TemplistValueBuffer[0]->AddTail( vnt );
//strTempArray.Add(CString(MCGS_TIME_FIELD));
strTempArray.SetAt(0,CString(MCGS_TIME_FIELD));
LPBYTE pPos = buffSrc.GetData() + sizeof(time_t);
memcpy(&lngMS, pPos, sizeof(long));
pPos += sizeof(long);
vnt = lngMS;
TemplistValueBuffer[1]->AddTail( vnt );
//strTempArray.Add(CString(MCGS_TIMEMS_FIELD));
strTempArray.SetAt(1,CString(MCGS_TIMEMS_FIELD));
CString str;
int type;
for (int j = 0; j < iSize; j++)
{
CENDATA->SvrGetDataName(IDs[j], str);
//strTempArray.Add(str);
strTempArray.SetAt(j + 2,str);
CENDATA->SvrGetDataType(IDs[j], type);
switch (type)
{
case VSTRING:
{
DWORD dwLen = 0;
memcpy(&dwLen, pPos, sizeof(DWORD));
pPos += sizeof(DWORD);
LPTSTR lBuf = strValue.GetBuffer(dwLen);
memcpy(lBuf, pPos, dwLen);
pPos += dwLen;
strValue.ReleaseBuffer();
vnt = strValue;
TemplistValueBuffer[j + 2]->AddTail( vnt );
}
break;
case VSINGLE:
{
memcpy(&fValue, pPos, sizeof(float));
pPos += sizeof(float);
vnt = fValue;
TemplistValueBuffer[j + 2]->AddTail( vnt );
}
break;
case VINTEGER:
{
memcpy(&lngValue, pPos, sizeof(long));
pPos += sizeof(long);
vnt = lngValue;
TemplistValueBuffer[j + 2]->AddTail( vnt );
}
break;
default:
ASSERT( FALSE );
}
}
int ff = 0;
INTARRAY& selIDs = m_pSaveFile->m_pInfoFile->SvrGetSelIDs();
if(selIDs.GetSize() == 0)
{
for(int k = 0; k < arrayStrFilter.GetSize(); k++)
{
for(int ik = 0; ik < strTempArray.GetSize(); ik++)
{
if(arrayStrFilter[k] == strTempArray[ik])
{
selIDs.Add(ik);
POSITION pos = TemplistValueBuffer[ik]->GetHeadPosition();
while(pos)
{
listValueBuffer[ff]->AddTail(TemplistValueBuffer[ik]->GetNext(pos));
}
ff++;
}
}
}
}
else
{
int iCount = selIDs.GetSize();
for(int i = 0; i < iCount; i++)
{
POSITION pos = TemplistValueBuffer[selIDs[i]]->GetHeadPosition();
while(pos)
{
listValueBuffer[i]->AddTail(TemplistValueBuffer[selIDs[i]]->GetNext(pos));
}
}
}
kk = 0;
for(kk = 0; kk < TemplistValueBuffer.GetSize(); kk++)
{
if(TemplistValueBuffer[kk] != NULL)
{
delete TemplistValueBuffer[kk];
TemplistValueBuffer[kk] = NULL;
}
}
return true;
}
*/
//to do deter load unload block
void CVirtualSaveFile::mfCheckLoad()
{
if (m_bLoadFile == false)
{
SvrLoadSaveBlock(false);
}
}
/*
//lzlzlz
INTARRAY& CVirtualSaveFile::SvrGetGrpObjIDs()
{
return m_pInfoFile->m_GrpObjInfo.m_IDs;
}*/
DATAOBJSINFO& CVirtualSaveFile::SvrGetGrpObjsInfo()
{
return m_pInfoFile->m_GrpObjInfo;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -