⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 virtualsavefile.cpp

📁 mcgs的数据导出源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			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 + -