예제 #1
0
//we are assumed to be in a mutex here
void DBWrite(DWORD ofs,PVOID pData,int bytes)
{
	log2("write %d@%08x",bytes,ofs);
	if (ofs+bytes>dwFileSize) ReMap(ofs+bytes-dwFileSize);
	MoveMemory(pDbCache+ofs,pData,bytes);
	logg();
}
예제 #2
0
DWORD CDb3Mmap::CreateNewSpace(int bytes)
{
	DWORD ofsNew = m_dbHeader.ofsFileEnd;
	m_dbHeader.ofsFileEnd += bytes;
	if (m_dbHeader.ofsFileEnd > m_dwFileSize)
		ReMap(m_dbHeader.ofsFileEnd - m_dwFileSize);
	DBWrite(0, &m_dbHeader, sizeof(m_dbHeader));
	log2("newspace %d@%08x", bytes, ofsNew);
	return ofsNew;
}
예제 #3
0
파일: StkFile.cpp 프로젝트: ifzz/yinhustock
void CStkFile::ReMapFromBegin(int nCount)
{
	if (m_bShareMem == FALSE && m_hFile == (HANDLE)hFileNull || m_hFileMap == NULL)
	{
		ASSERT(FALSE);
		return;
	}

	SeekToBegin();
	ReMap(nCount);
}
예제 #4
0
void DBMoveChunk(DWORD ofsDest,DWORD ofsSource,int bytes)
{
    int x = 0;
	log3("move %d %08x->%08x",bytes,ofsSource,ofsDest);
	if (ofsDest+bytes>dwFileSize) ReMap(ofsDest+bytes-dwFileSize);
	if (ofsSource+bytes>dwFileSize) {
		x = ofsSource+bytes-dwFileSize;
		log0("buggy move!");
		_ASSERT(0);
	}
	if (x > 0)
		ZeroMemory(pDbCache+ofsDest+bytes-x, x);
	if (ofsSource < dwFileSize)
		MoveMemory(pDbCache+ofsDest,pDbCache+ofsSource, bytes-x);

	logg();
}
예제 #5
0
파일: StkFile.cpp 프로젝트: ifzz/yinhustock
void CStkFile::Write(const void* lpBuf, UINT nCount)
{
	ASSERT(m_bShareMem == TRUE || m_hFile != (HANDLE)hFileNull);
	if (m_bShareMem == FALSE && m_hFile == (HANDLE)hFileNull || m_hFileMap == NULL)
	{
		ASSERT(FALSE);
		return;
	}

	if (nCount == 0)
		return;

	if (ReMap(nCount) == FALSE)
		return;

	ASSERT(lpBuf != NULL);
	ASSERT(AfxIsValidAddress(lpBuf, nCount, FALSE));

	memcpy(m_lpvFileCurrent, lpBuf, nCount);
	m_lpvFileCurrent += nCount;

	if (m_lpvFileCurrent > m_lpvFileEnd)
		m_lpvFileEnd = m_lpvFileCurrent;
}