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

📄 outbuffer.cpp

📁 sleuthit-2.09 一个磁盘的工具集
💻 CPP
字号:
// OutByte.cpp#include "StdAfx.h"#include "OutBuffer.h"#include "../../Common/Alloc.h"bool COutBuffer::Create(UInt32 bufferSize){  const UInt32 kMinBlockSize = 1;  if (bufferSize < kMinBlockSize)    bufferSize = kMinBlockSize;  if (_buffer != 0 && _bufferSize == bufferSize)    return true;  Free();  _bufferSize = bufferSize;  _buffer = (Byte *)::MidAlloc(bufferSize);  return (_buffer != 0);}void COutBuffer::Free(){  ::MidFree(_buffer);  _buffer = 0;}void COutBuffer::SetStream(ISequentialOutStream *stream){  _stream = stream;}void COutBuffer::Init(){  _streamPos = 0;  _limitPos = _bufferSize;  _pos = 0;  _processedSize = 0;  _overDict = false;  #ifdef _NO_EXCEPTIONS  ErrorCode = S_OK;  #endif}UInt64 COutBuffer::GetProcessedSize() const{   UInt64 res = _processedSize + _pos - _streamPos;  if (_streamPos > _pos)     res += _bufferSize;  return res;}HRESULT COutBuffer::FlushPart(){  // _streamPos < _bufferSize  UInt32 size = (_streamPos >= _pos) ? (_bufferSize - _streamPos) : (_pos - _streamPos);  HRESULT result = S_OK;  #ifdef _NO_EXCEPTIONS  result = ErrorCode;  #endif  if (_buffer2 != 0)  {    memmove(_buffer2, _buffer + _streamPos, size);    _buffer2 += size;  }  if (_stream != 0      #ifdef _NO_EXCEPTIONS      && (ErrorCode == S_OK)      #endif     )  {    UInt32 processedSize = 0;    result = _stream->Write(_buffer + _streamPos, size, &processedSize);    size = processedSize;  }  _streamPos += size;  if (_streamPos == _bufferSize)    _streamPos = 0;  if (_pos == _bufferSize)  {    _overDict = true;    _pos = 0;  }  _limitPos = (_streamPos > _pos) ? _streamPos : _bufferSize;  _processedSize += size;  return result;}HRESULT COutBuffer::Flush(){  #ifdef _NO_EXCEPTIONS  if (ErrorCode != S_OK)    return ErrorCode;  #endif  while(_streamPos != _pos)  {    HRESULT result = FlushPart();    if (result != S_OK)      return result;  }  return S_OK;}void COutBuffer::FlushWithCheck(){  HRESULT result = FlushPart();  #ifdef _NO_EXCEPTIONS  ErrorCode = result;  #else  if (result != S_OK)    throw COutBufferException(result);  #endif}

⌨️ 快捷键说明

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