📄 inbuffer.h
字号:
// InBuffer.h#ifndef __INBUFFER_H#define __INBUFFER_H#include "../IStream.h"#include "../../Common/MyCom.h"#ifndef _NO_EXCEPTIONSclass CInBufferException{public: HRESULT ErrorCode; CInBufferException(HRESULT errorCode): ErrorCode(errorCode) {}};#endifclass CInBuffer{ Byte *_buffer; Byte *_bufferLimit; Byte *_bufferBase; CMyComPtr<ISequentialInStream> _stream; UInt64 _processedSize; UInt32 _bufferSize; bool _wasFinished; bool ReadBlock(); Byte ReadBlock2();public: #ifdef _NO_EXCEPTIONS HRESULT ErrorCode; #endif CInBuffer(); ~CInBuffer() { Free(); } bool Create(UInt32 bufferSize); void Free(); void SetStream(ISequentialInStream *stream); void Init(); void ReleaseStream() { _stream.Release(); } bool ReadByte(Byte &b) { if(_buffer >= _bufferLimit) if(!ReadBlock()) return false; b = *_buffer++; return true; } Byte ReadByte() { if(_buffer >= _bufferLimit) return ReadBlock2(); return *_buffer++; } void ReadBytes(void *data, UInt32 size, UInt32 &processedSize) { for(processedSize = 0; processedSize < size; processedSize++) if (!ReadByte(((Byte *)data)[processedSize])) return; } bool ReadBytes(void *data, UInt32 size) { UInt32 processedSize; ReadBytes(data, size, processedSize); return (processedSize == size); } UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); } bool WasFinished() const { return _wasFinished; }};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -