亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? memfile.cpp

?? 基于Nuleus操作系統和s3c4510的編寫的EFC。已經包含了該EFC的設計說明。這是個實際產品的代碼
?? CPP
字號:
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2003, Ulink Telecom Equipment Co., Ltd. All rights reserved.
//
// File:
//
//    MemFile.cpp
//
// Abstract:
//
//    implementation of the CMemFile class. CMemFile is the CFile-derived class 
//    that support memory files.
//
// History:
//
//    V1.0	2003-03-12	Alex Duan	Original version.
//    V1.1	2003-11-11	Alex Duan	Fixed a bug in Find function when find in
//									more than one block.
//
///////////////////////////////////////////////////////////////////////////////

#include "MemFile.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMemFile::CMemFile(UINT nGrowBytes)
{
	m_nGrowBytes = nGrowBytes;
}

CMemFile::~CMemFile()
{
	Close(); // Call CMemFile::Close()
}

///////////////////////////////////////////////////////////////////////////////
// Parameters:
//		lpBuf	A pointer to the user-supplied buffer that contains the data 
//				to be written to the file.
//		nCount	The number of bytes to be transferred from the buffer. 
// Remarks:
//		Writes data from a buffer to the file associated with the CFile object. 
void CMemFile::Write(const void *lpBuf, UINT nCount)
{
	ASSERT(lpBuf != NULL || nCount == 0);
	ASSERT(((DWORD)lpBuf & 0x01) == 0); // started from even address required.

	if (nCount == 0)
		return;
	
	if (m_nPosition + nCount > GetBufferSize())
		GrowFile(m_nPosition + nCount);
	
	ASSERT(GetBufferSize() >= m_nPosition + nCount);

	BYTE *pSrc = (BYTE*)lpBuf;	// Pointer of the source buffer
	BYTE *pDes = NULL;			// Pointer of the destination buffer
	UINT nOffset;				// Zero-based offset address in a buffer
	UINT nBuffer;				// Zero-based index of the buffer number
	UINT nCopyCount;			// Count of bytes at one copy operation
	while (nCount > 0)
	{
		nOffset = m_nPosition % m_nGrowBytes;
		nBuffer = m_nPosition / m_nGrowBytes;

		VERIFY(m_mapBuffers.Lookup(nBuffer, pDes));

		nCopyCount = m_nGrowBytes - nOffset;
		if (nCopyCount > nCount) nCopyCount = nCount;
		memcpy(pDes + nOffset, pSrc, nCopyCount);
		nCount -= nCopyCount; // nCount is the count of remainder bytes
		pSrc   += nCopyCount;
		m_nPosition += nCopyCount; // new file pointer
	}
	if (m_nPosition > m_nFileSize)
		m_nFileSize = m_nPosition;
}

///////////////////////////////////////////////////////////////////////////////
// Parameters:
//		dwNewLen	Desired length of the file in bytes.  This  value  can  be 
//					larger or smaller than the current length of the file. The 
//					file will be extended or truncated as appropriate.
// Remarks:
//		Call this function to change the length of the file.
void CMemFile::SetLength(DWORD dwNewLen)
{
	GrowFile(dwNewLen);
	ASSERT(GetBufferSize() >= dwNewLen);
	m_nFileSize = dwNewLen;
}

///////////////////////////////////////////////////////////////////////////////
// Parameters:
//		dwNewLen	New minimum size of the memory file
// Remarks:
//		Allocates more memories for the file.
void CMemFile::GrowFile(DWORD dwNewLen)
{
	ASSERT_VALID(this);
	ASSERT(m_nGrowBytes != 0);
	
	DWORD dwNewBufferSize = GetBufferSize();
	if (dwNewLen > dwNewBufferSize && m_nGrowBytes > 0)
	{// grow the buffer
		// determine new buffer size
		UINT nCount = m_mapBuffers.GetCount();
		while (dwNewBufferSize < dwNewLen)
		{
			BYTE *pByte = new BYTE[m_nGrowBytes];
			ASSERT(pByte != NULL);
			m_mapBuffers.SetAt(nCount++, pByte);
			dwNewBufferSize += m_nGrowBytes;
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// Parameters:
//		lpBuf	Pointer to the user-supplied buffer that is to receive the 
//				data read from the file.
//		nCount	The maximum number of bytes to be read from the file.
// Return Value:
//		The number of bytes transferred to the buffer.
// Remarks:
//		Reads data into a buffer from the file associated with the CFile object.
UINT CMemFile::Read(void *lpBuf, UINT nCount)
{
	ASSERT(lpBuf != NULL || nCount == 0);
	ASSERT(((DWORD)lpBuf & 0x01) == 0); // started from even address required.

	if (nCount == 0)
		return 0;
	
	if (m_nPosition > m_nFileSize)
		return 0;
	
	UINT nRead;
	if (m_nPosition + nCount > m_nFileSize)
		nRead = (UINT)(m_nFileSize - m_nPosition);
	else
		nRead = nCount;
	
	BYTE *pDes = (BYTE*)lpBuf;	// Pointer of the destination buffer
	BYTE *pSrc = NULL;			// Pointer of the source buffer
	UINT nOffset;				// Zero-based offset address in a buffer
	UINT nBuffer;				// Zero-based index of the buffer number
	UINT nCopyCount;			// Count of bytes at one copy operation
	nCount = nRead;
	while (nCount > 0)
	{
		nOffset = m_nPosition % m_nGrowBytes;
		nBuffer = m_nPosition / m_nGrowBytes;
		
		VERIFY(m_mapBuffers.Lookup(nBuffer, pSrc));
		
		nCopyCount = m_nGrowBytes - nOffset;
		if (nCopyCount > nCount) nCopyCount = nCount;
		memcpy(pDes, pSrc + nOffset, nCopyCount);
		nCount -= nCopyCount;
		pDes += nCopyCount;
		m_nPosition += nCopyCount;
	}
	
	return nRead;
}

// Close the file, free the memories
void CMemFile::Close()
{
	m_nPosition  = 0;
	m_nFileSize  = 0;
	m_nOpenFlags = 0;
	BYTE *puByte = NULL;
	UINT nBuffer;
	POSITION pos = m_mapBuffers.GetStartPosition();
	while (pos != NULL)
	{
		m_mapBuffers.GetNextAssoc(pos, nBuffer, puByte);
		if (puByte != NULL)
		{
			delete[] puByte;
			puByte = NULL;
		}
	}
	m_mapBuffers.RemoveAll();
}

///////////////////////////////////////////////////////////////////////////////
// Text file operations

///////////////////////////////////////////////////////////////////////////////
// Parameters:
//		lpszString	A string to search for
// Return Value:
//		The zero-based index relative to current file pointer of the first 
//		character in this file that matches the requested string;
//		-1 if the string is not found.
// Remarks:
//		Finds a string inside a text format file from current position.
int CMemFile::Find(LPCSTR lpszString) const
{
	if (lpszString == NULL) 
		return -1;
	
	LPCSTR lpsz; // string pointer returned by strstr()
	int nRelative = 0; // string position relative to current file pointer
	// Pointer of the file buffer
	BYTE *pBuffer = NULL;
	// Zero-based offset address in a buffer
	int nOffset = m_nPosition % m_nGrowBytes;
	// Zero-based index of the buffer number
	int nBuffer = m_nPosition / m_nGrowBytes;
	for (; nBuffer < m_mapBuffers.GetCount(); nBuffer++)
	{
		VERIFY(m_mapBuffers.Lookup(nBuffer, pBuffer));
		ASSERT(pBuffer);
		
		pBuffer += nOffset;
		// find string from buffer
		lpsz = strstr((LPCSTR)pBuffer, lpszString);
		
		if (lpsz)
		{// string found
			nRelative += (int)(lpsz - (LPCSTR)pBuffer);
			break;
		}
		nRelative += m_nGrowBytes - nOffset;
		nOffset = 0;
	}

	return (nRelative + m_nPosition > m_nFileSize) ? -1 : nRelative;
}

///////////////////////////////////////////////////////////////////////////////
// Parameters:
//		rString	A reference to a CString object that will contain the string 
//				when the function returns.
// Return Value:
//		The number of bytes read from the file.
// Remarks:
//		Read a line of string from the file.
UINT CMemFile::ReadLine(CString &rString)
{
	UINT nCount = Find("\r\n"); // if not found, nCount=-1 (UINT_MAX)
	// nCount includes "\r\n"
	nCount = (nCount == -1) ? (m_nFileSize - m_nPosition) : (nCount + 2);
	nCount = Read(rString.GetBuffer(nCount), nCount);
	rString.ReleaseBuffer(nCount);
	return nCount;
}

///////////////////////////////////////////////////////////////////////////////
// Parameters:
//		lpszString	Specifies a pointer to a buffer containing a null-terminated
//					text string.
// Remarks:
//		Write a line of string to the file. "\r\n" are appended automatically.
void CMemFile::WriteLine(LPCSTR lpszString)
{
	if (lpszString) 
	{
		Write(lpszString, strlen(lpszString));
		Write("\r\n", 2);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线一区观看| 日韩欧美激情一区| 欧美久久免费观看| 久久精品这里都是精品| 一区二区三区视频在线观看| 99re这里只有精品6| 91精品婷婷国产综合久久竹菊| 久久精品亚洲精品国产欧美 | 日本亚洲最大的色成网站www| 成人午夜av电影| 欧美大片在线观看一区| 一区二区三区91| eeuss鲁一区二区三区| 欧美成人a视频| 午夜成人免费视频| 91麻豆精品秘密| 中文字幕第一区| 国产乱码精品一区二区三区忘忧草| 欧美丝袜自拍制服另类| 亚洲人成网站精品片在线观看 | 欧美mv和日韩mv的网站| 午夜不卡av免费| 色先锋aa成人| 亚洲三级在线观看| 99久久精品国产网站| 亚洲国产高清在线| 国产成人精品在线看| 久久欧美一区二区| 国产一区二区三区免费观看 | caoporen国产精品视频| 久久久久国产精品免费免费搜索| 视频一区中文字幕国产| 欧洲一区二区av| 亚洲一区二三区| 欧美在线免费播放| 国产91丝袜在线观看| 精品成人在线观看| 久久99最新地址| 精品国精品自拍自在线| 日韩高清在线不卡| 日韩欧美精品三级| 国产伦精品一区二区三区在线观看| 精品久久久久久久久久久久久久久| 久久丁香综合五月国产三级网站| 日韩午夜在线播放| 国产一区二区电影| 亚洲国产高清aⅴ视频| 91一区二区三区在线播放| 一区二区三区成人在线视频| 欧美系列一区二区| 日韩avvvv在线播放| 精品免费日韩av| 成人一区在线观看| 一区二区三区在线视频播放| 欧美日韩在线一区二区| 日韩电影一区二区三区| 久久久久久久久久久黄色| 99久久精品国产网站| 日韩精品免费视频人成| 久久久影院官网| av在线不卡电影| 天天操天天综合网| 欧美精品一区二区三区四区| 成+人+亚洲+综合天堂| 一区二区三区四区国产精品| 日韩精品一区二区三区视频播放 | 日韩欧美在线观看一区二区三区| 国产一级精品在线| 亚洲欧美日韩一区| 91精品国产91久久久久久一区二区 | 色婷婷综合中文久久一本| 天堂成人国产精品一区| 久久久青草青青国产亚洲免观| 一本一道波多野结衣一区二区| 日本一不卡视频| 综合分类小说区另类春色亚洲小说欧美| 欧美午夜精品一区二区蜜桃| 国产麻豆日韩欧美久久| 一区二区激情小说| 26uuu亚洲| 欧美三级三级三级爽爽爽| 国产成人午夜精品5599| 午夜亚洲国产au精品一区二区| 久久九九久久九九| 91精品国产综合久久久久久久 | 国产成人在线视频网址| 亚洲va在线va天堂| 中文字幕一区二区三区四区| 欧美变态凌虐bdsm| 欧美三级电影一区| 99精品欧美一区| 国产成人免费高清| 久久99精品国产.久久久久| 亚洲高清不卡在线| 综合久久久久综合| 久久久夜色精品亚洲| 日韩免费高清视频| 欧美日韩高清一区二区三区| 99v久久综合狠狠综合久久| 精品在线播放午夜| 日本不卡一二三区黄网| 亚洲图片自拍偷拍| 一区二区久久久久| 亚洲欧美日韩综合aⅴ视频| 中文字幕高清一区| 久久九九国产精品| 国产亚洲精品资源在线26u| 日韩视频在线永久播放| 91精品国产品国语在线不卡| 91搞黄在线观看| 91麻豆精品在线观看| 97久久精品人人做人人爽50路| 成人97人人超碰人人99| 国产91精品露脸国语对白| 粉嫩高潮美女一区二区三区| 国产一区二区日韩精品| 国产精品一区二区三区四区 | 日韩经典中文字幕一区| 亚洲一区电影777| 一区二区三区欧美视频| 亚洲线精品一区二区三区八戒| 亚洲欧美色综合| 亚洲mv大片欧洲mv大片精品| 亚洲一区二区在线播放相泽| 亚洲国产欧美日韩另类综合| 亚洲成人免费影院| 天堂av在线一区| 久久国产三级精品| 国产精品资源网| 成人app软件下载大全免费| 99国内精品久久| 欧美在线免费播放| 日韩三级电影网址| 欧美国产日韩在线观看| 亚洲精品精品亚洲| 日韩av一二三| 国产精品夜夜嗨| 91性感美女视频| 7777精品伊人久久久大香线蕉的| 日韩精品在线网站| 欧美经典一区二区三区| 亚洲精品伦理在线| 蜜臀av一级做a爰片久久| 国产成人8x视频一区二区| 日本精品视频一区二区| 日韩欧美在线一区二区三区| 国产日韩欧美在线一区| 亚洲伦理在线精品| 久久精品国产77777蜜臀| 国产v日产∨综合v精品视频| 在线观看日产精品| 精品久久一二三区| 亚洲欧美日韩在线播放| 精品一区二区三区免费观看| 不卡一区二区三区四区| 欧美日韩国产片| 日本一区二区综合亚洲| 日韩一区欧美二区| 91无套直看片红桃| 欧美哺乳videos| 午夜视频在线观看一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 在线视频国产一区| 欧美日韩国产综合一区二区| 精品国产污网站| 国产欧美精品一区| 亚洲一区二区三区四区在线观看 | 91蜜桃传媒精品久久久一区二区| 欧美精品丝袜久久久中文字幕| 日本一区二区三区免费乱视频 | 不卡一区中文字幕| 日韩一级片在线播放| 亚洲欧美日韩在线| 国产 欧美在线| 欧美成人三级在线| 亚洲午夜在线观看视频在线| caoporen国产精品视频| 国产午夜精品福利| 毛片av一区二区| 91精品国产美女浴室洗澡无遮挡| 一区二区三区四区亚洲| 99久久99久久久精品齐齐| 国产日韩欧美麻豆| 国产乱子轮精品视频| 91精品福利在线一区二区三区| 亚洲午夜久久久| 一本色道亚洲精品aⅴ| 国产精品久久久久久久久免费樱桃 | 一区二区三区av电影| 99久久99久久免费精品蜜臀| 国产欧美一区二区三区鸳鸯浴| 欧美a一区二区| 欧美一区二区三区四区五区 | 国产一区二区三区免费播放| 日韩精品中午字幕| 日本aⅴ精品一区二区三区| 欧美日韩一二三| 午夜av一区二区| 欧美久久久久久久久久| 偷拍一区二区三区四区|