Files
tesses-framework/src/Streams/BufferedStream.cpp
2025-04-16 07:47:01 -05:00

67 lines
1.8 KiB
C++

#include "TessesFramework/Streams/BufferedStream.hpp"
namespace Tesses::Framework::Streams {
BufferedStream::BufferedStream(Stream* strm, bool owns, size_t bufferSize)
{
this->strm = strm;
this->owns = owns;
this->bufferSize = bufferSize;
this->buffer = new uint8_t[bufferSize];
this->read = 0;
this->offset = 0;
}
BufferedStream::BufferedStream(Stream& strm, size_t bufferSize) : BufferedStream(&strm,false, bufferSize)
{
}
bool BufferedStream::EndOfStream()
{
if(this->offset < this->read) return false;
return this->strm->EndOfStream();
}
bool BufferedStream::CanRead()
{
if(this->offset < this->read) return true;
return this->strm->CanRead();
}
bool BufferedStream::CanWrite()
{
return this->strm->CanWrite();
}
size_t BufferedStream::Read(uint8_t* buff, size_t sz)
{
if(this->offset < this->read)
{
sz = std::min(sz,this->read-this->offset);
memcpy(buff, this->buffer+this->offset, sz);
this->offset+=sz;
return sz;
}
if(sz < this->bufferSize)
{
this->read = this->strm->Read(this->buffer, this->bufferSize);
this->offset=0;
sz = std::min(sz,this->read-this->offset);
memcpy(buff, this->buffer+this->offset, sz);
this->offset+=sz;
return sz;
}
else
{
return this->strm->Read(buff, sz);
}
}
size_t BufferedStream::Write(const uint8_t* buff, size_t sz)
{
return this->strm->Write(buff,sz);
}
BufferedStream::~BufferedStream()
{
if(this->owns)
delete this->strm;
delete buffer;
}
}