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

📄 gstream.cpp

📁 一个非常有用的开源代码
💻 CPP
字号:
/*	Copyright (C) 2006, Mike Gashler	This library is free software; you can redistribute it and/or	modify it under the terms of the GNU Lesser General Public	License as published by the Free Software Foundation; either	version 2.1 of the License, or (at your option) any later version.	see http://www.gnu.org/copyleft/lesser.html*/#include "GMacros.h"#include "GStream.h"GStream::GStream(const void* pBuff, unsigned int nBufferSize, unsigned int nDataSize, bool bWritePermission){	m_pBuff = (unsigned char*)pBuff;	m_nBufferSize = nBufferSize;	if(nDataSize > nBufferSize)		GAssert(false, "Error, too big for buffer");	m_bWritePermission = bWritePermission;	m_nDataSize = nDataSize;	m_nBufferPos = 0;	m_nDataPos = 0;}GStream::~GStream(){	// Don't delete the buffer because we didn't allocate it}unsigned int GStream::Write(const void* pBuff, unsigned int nSize){	if(!m_bWritePermission)	{		GAssert(false, "Buffer is read-only");		return 0;	}	unsigned int nWriteSize = MIN(nSize, m_nBufferSize - m_nDataSize);	unsigned int nStartPos = m_nBufferPos + m_nDataSize;	if(nStartPos > m_nBufferSize)		nStartPos -= m_nBufferSize;	unsigned int nPart1WriteSize = MIN(nWriteSize, m_nBufferSize - nStartPos);	memcpy(m_pBuff + nStartPos, pBuff, nPart1WriteSize);	if(nWriteSize > nPart1WriteSize)		memcpy(m_pBuff, (unsigned char*)pBuff + nPart1WriteSize, nWriteSize - nPart1WriteSize);	m_nDataSize += nWriteSize;	return(nWriteSize);}unsigned int GStream::Read(void* pBuff, unsigned int nSize){	unsigned int nReadSize = MIN(nSize, m_nDataSize);	unsigned int nPart1ReadSize = MIN(nReadSize, m_nBufferSize - m_nBufferPos);	memcpy(pBuff, m_pBuff + m_nBufferPos, nPart1ReadSize);	m_nBufferPos += nReadSize;	if(nReadSize > nPart1ReadSize)	{		memcpy((unsigned char*)pBuff + nPart1ReadSize, m_pBuff, nReadSize - nPart1ReadSize);		m_nBufferPos -= m_nBufferSize;	}	m_nDataSize -= nReadSize;	m_nDataPos += nReadSize;	return(nReadSize);}unsigned int GStream::Eat(unsigned int nSize){	unsigned int nReadSize = MIN(nSize, m_nDataSize);	m_nBufferPos += nReadSize;	if(m_nBufferPos > m_nBufferSize)		m_nBufferPos -= m_nBufferSize;	m_nDataSize -= nReadSize;	m_nDataPos += nReadSize;	return(nReadSize);}unsigned char GStream::Peek(unsigned int nOffset){	unsigned int nPos = m_nBufferPos + nOffset;	if(nPos > m_nBufferSize)		nPos -= m_nBufferSize;	return m_pBuff[nPos];}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -