mirror of
https://github.com/NoelFB/blah.git
synced 2025-07-02 19:55:26 +08:00
cleaning up file / memory streams
This commit is contained in:
@ -28,12 +28,15 @@ BufferStream::BufferStream(BufferStream&& src) noexcept
|
||||
|
||||
BufferStream& BufferStream::operator=(BufferStream&& src) noexcept
|
||||
{
|
||||
close();
|
||||
|
||||
m_buffer = src.m_buffer;
|
||||
m_length = src.m_length;
|
||||
m_capacity = src.m_capacity;
|
||||
m_position = src.m_position;
|
||||
src.m_buffer = nullptr;
|
||||
src.m_position = src.m_length = src.m_capacity = 0;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -42,7 +45,22 @@ BufferStream::~BufferStream()
|
||||
delete[] m_buffer;
|
||||
}
|
||||
|
||||
size_t BufferStream::read_into(void* ptr, size_t len)
|
||||
size_t BufferStream::length() const
|
||||
{
|
||||
return m_length;
|
||||
}
|
||||
|
||||
size_t BufferStream::position() const
|
||||
{
|
||||
return m_position;
|
||||
}
|
||||
|
||||
size_t BufferStream::seek(size_t seekTo)
|
||||
{
|
||||
return m_position = (seekTo < 0 ? 0 : (seekTo > m_length ? m_length : seekTo));
|
||||
}
|
||||
|
||||
size_t BufferStream::read_data(void* ptr, size_t len)
|
||||
{
|
||||
if (m_buffer == nullptr || ptr == nullptr)
|
||||
return 0;
|
||||
@ -58,7 +76,7 @@ size_t BufferStream::read_into(void* ptr, size_t len)
|
||||
return len;
|
||||
}
|
||||
|
||||
size_t BufferStream::write_from(const void* ptr, size_t len)
|
||||
size_t BufferStream::write_data(const void* ptr, size_t len)
|
||||
{
|
||||
if (len < 0)
|
||||
return 0;
|
||||
@ -78,6 +96,21 @@ size_t BufferStream::write_from(const void* ptr, size_t len)
|
||||
return len;
|
||||
}
|
||||
|
||||
bool BufferStream::is_open() const
|
||||
{
|
||||
return m_buffer != nullptr;
|
||||
}
|
||||
|
||||
bool BufferStream::is_readable() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BufferStream::is_writable() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void BufferStream::resize(size_t length)
|
||||
{
|
||||
if (m_capacity > length)
|
||||
@ -114,4 +147,19 @@ void BufferStream::close()
|
||||
m_position = 0;
|
||||
m_length = 0;
|
||||
m_capacity = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void BufferStream::clear()
|
||||
{
|
||||
m_length = m_position = 0;
|
||||
}
|
||||
|
||||
char* BufferStream::data()
|
||||
{
|
||||
return m_buffer;
|
||||
}
|
||||
|
||||
const char* BufferStream::data() const
|
||||
{
|
||||
return m_buffer;
|
||||
}
|
||||
|
@ -51,6 +51,30 @@ size_t FileStream::seek(size_t seek_to)
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t FileStream::read_data(void* ptr, size_t length)
|
||||
{
|
||||
if (length <= 0)
|
||||
return 0;
|
||||
|
||||
if (m_file)
|
||||
return m_file->read((unsigned char*)ptr, length);
|
||||
|
||||
BLAH_ASSERT(false, "Unable to read from Stream");
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t FileStream::write_data(const void* ptr, size_t length)
|
||||
{
|
||||
if (length <= 0)
|
||||
return 0;
|
||||
|
||||
if (m_file)
|
||||
return m_file->write((const unsigned char*)ptr, length);
|
||||
|
||||
BLAH_ASSERT(false, "Unable to write to Stream");
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool FileStream::is_open() const
|
||||
{
|
||||
return m_file.get();
|
||||
@ -66,30 +90,6 @@ bool FileStream::is_writable() const
|
||||
return m_file.get() && (m_mode != FileMode::OpenRead);
|
||||
}
|
||||
|
||||
size_t FileStream::read_into(void* ptr, size_t length)
|
||||
{
|
||||
if (length <= 0)
|
||||
return 0;
|
||||
|
||||
if (m_file)
|
||||
return m_file->read((unsigned char*)ptr, length);
|
||||
|
||||
BLAH_ASSERT(false, "Unable to read from Stream");
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t FileStream::write_from(const void* ptr, size_t length)
|
||||
{
|
||||
if (length <= 0)
|
||||
return 0;
|
||||
|
||||
if (m_file)
|
||||
return m_file->write((const unsigned char*)ptr, length);
|
||||
|
||||
BLAH_ASSERT(false, "Unable to write to Stream");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void FileStream::close()
|
||||
{
|
||||
m_file.reset();
|
||||
|
@ -28,7 +28,22 @@ MemoryStream& MemoryStream::operator=(MemoryStream&& src) noexcept
|
||||
return *this;
|
||||
}
|
||||
|
||||
size_t MemoryStream::read_into(void* ptr, size_t len)
|
||||
size_t MemoryStream::length() const
|
||||
{
|
||||
return m_length;
|
||||
}
|
||||
|
||||
size_t MemoryStream::position() const
|
||||
{
|
||||
return m_position;
|
||||
}
|
||||
|
||||
size_t MemoryStream::seek(size_t seekTo)
|
||||
{
|
||||
return m_position = (seekTo < 0 ? 0 : (seekTo > m_length ? m_length : seekTo));
|
||||
}
|
||||
|
||||
size_t MemoryStream::read_data(void* ptr, size_t len)
|
||||
{
|
||||
if (len < 0 || ptr == nullptr)
|
||||
return 0;
|
||||
@ -41,7 +56,7 @@ size_t MemoryStream::read_into(void* ptr, size_t len)
|
||||
return len;
|
||||
}
|
||||
|
||||
size_t MemoryStream::write_from(const void* ptr, size_t len)
|
||||
size_t MemoryStream::write_data(const void* ptr, size_t len)
|
||||
{
|
||||
if (len < 0 || ptr == nullptr)
|
||||
return 0;
|
||||
@ -53,3 +68,33 @@ size_t MemoryStream::write_from(const void* ptr, size_t len)
|
||||
m_position += len;
|
||||
return len;
|
||||
}
|
||||
|
||||
bool MemoryStream::is_open() const
|
||||
{
|
||||
return m_data != nullptr;
|
||||
}
|
||||
|
||||
bool MemoryStream::is_readable() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MemoryStream::is_writable() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void MemoryStream::close()
|
||||
{
|
||||
m_data = nullptr; m_length = m_position = 0;
|
||||
}
|
||||
|
||||
char* MemoryStream::data()
|
||||
{
|
||||
return m_data;
|
||||
}
|
||||
|
||||
const char* MemoryStream::data() const
|
||||
{
|
||||
return m_data;
|
||||
}
|
||||
|
@ -28,6 +28,11 @@ size_t Stream::pipe(Stream& stream, size_t length)
|
||||
return result;
|
||||
}
|
||||
|
||||
size_t Stream::read(void* buffer, size_t length)
|
||||
{
|
||||
return read_data(buffer, length);
|
||||
}
|
||||
|
||||
// reads a string. if length < 0, assumes null-terminated
|
||||
String Stream::read_string(int length)
|
||||
{
|
||||
@ -42,7 +47,7 @@ String Stream::read_string(int length)
|
||||
else
|
||||
{
|
||||
result.set_length(length);
|
||||
read_into(result.cstr(), length);
|
||||
read(result.cstr(), length);
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -59,12 +64,12 @@ String Stream::read_line()
|
||||
return result;
|
||||
}
|
||||
|
||||
size_t Stream::write(const void* buffer, size_t length)
|
||||
{
|
||||
return write_from(buffer, length);
|
||||
size_t Stream::write(const void* buffer, size_t length)
|
||||
{
|
||||
return write_data(buffer, length);
|
||||
}
|
||||
|
||||
size_t Stream::write(const String& string)
|
||||
{
|
||||
return write_from(string.begin(), string.length());
|
||||
return write(string.begin(), string.length());
|
||||
}
|
||||
|
Reference in New Issue
Block a user