file: added more basic functions to custom file abstraction classes

This commit is contained in:
itsmattkc 2022-07-18 15:29:05 -07:00
parent 0443b9e69b
commit 91de5a7df4
2 changed files with 47 additions and 15 deletions

View file

@ -53,6 +53,15 @@ size_t File::pos()
}
}
size_t File::size()
{
size_t before = pos();
seek(0, SeekEnd);
size_t sz = pos();
seek(before, SeekStart);
return sz;
}
void File::seek(size_t p, SeekMode s)
{
std::ios::seekdir d;
@ -81,19 +90,23 @@ bool File::atEnd()
return !m_Stream.good();
}
void File::CloseHandle()
void File::Close()
{
m_Stream.close();
}
void File::ReadData(char *data, size_t size)
size_t File::ReadData(char *data, size_t size)
{
size_t before = this->pos();
m_Stream.read(data, size);
return this->pos() - before;
}
void File::WriteData(const char *data, size_t size)
size_t File::WriteData(const char *data, size_t size)
{
size_t before = this->pos();
m_Stream.write(data, size);
return this->pos() - before;
}
uint8_t FileBase::ReadU8()
@ -188,11 +201,22 @@ MemoryBuffer::MemoryBuffer()
m_Position = 0;
}
MemoryBuffer::MemoryBuffer(const bytearray &data)
{
m_Internal = data;
m_Position = 0;
}
size_t MemoryBuffer::pos()
{
return m_Position;
}
size_t MemoryBuffer::size()
{
return m_Internal.size();
}
void MemoryBuffer::seek(size_t p, SeekMode s)
{
switch (s) {
@ -213,22 +237,23 @@ bool MemoryBuffer::atEnd()
return m_Position == m_Internal.size();
}
void MemoryBuffer::ReadData(char *data, size_t size)
size_t MemoryBuffer::ReadData(char *data, size_t size)
{
size = std::min(size, m_Internal.size() - m_Position);
memcpy(data, m_Internal.data() + m_Position, size);
m_Position += size;
return size;
}
void MemoryBuffer::WriteData(const char *data, size_t size)
size_t MemoryBuffer::WriteData(const char *data, size_t size)
{
LogDebug() << "writing " << size << " bytes to " << m_Position << std::endl;
size_t end = m_Position + size;
if (end > m_Internal.size()) {
m_Internal.resize(end);
}
memcpy(m_Internal.data() + m_Position, data, size);
m_Position += size;
return size;
}
}

View file

@ -29,7 +29,7 @@ public:
std::string ReadString();
bytearray ReadBytes(size_t size);
Vector3 ReadVector3();
virtual void ReadData(char *data, size_t size) = 0;
virtual size_t ReadData(char *data, size_t size) = 0;
void WriteU8(uint8_t u);
void WriteU16(uint16_t u);
@ -37,7 +37,7 @@ public:
void WriteString(const std::string &s);
void WriteBytes(const bytearray &b);
void WriteVector3(const Vector3 &b);
virtual void WriteData(const char *data, size_t size) = 0;
virtual size_t WriteData(const char *data, size_t size) = 0;
virtual void Close() {}
@ -49,6 +49,7 @@ public:
};
virtual size_t pos() = 0;
virtual size_t size() = 0;
virtual void seek(size_t p, SeekMode s = SeekStart) = 0;
virtual bool atEnd() = 0;
@ -57,6 +58,11 @@ public:
class File : public FileBase
{
public:
virtual ~File()
{
Close();
}
bool Open(const char *c, Mode mode);
#ifdef _WIN32
@ -64,13 +70,13 @@ public:
#endif
virtual size_t pos();
virtual size_t size();
virtual void seek(size_t p, SeekMode s = SeekStart);
virtual bool atEnd();
protected:
virtual void CloseHandle();
virtual void ReadData(char *data, size_t size);
virtual void WriteData(const char *data, size_t size);
virtual void Close();
virtual size_t ReadData(char *data, size_t size);
virtual size_t WriteData(const char *data, size_t size);
private:
std::fstream m_Stream;
@ -82,16 +88,17 @@ class MemoryBuffer : public FileBase
{
public:
MemoryBuffer();
MemoryBuffer(const bytearray &data);
virtual size_t pos();
virtual size_t size();
virtual void seek(size_t p, SeekMode s = SeekStart);
virtual bool atEnd();
const bytearray &data() const { return m_Internal; }
protected:
virtual void ReadData(char *data, size_t size);
virtual void WriteData(const char *data, size_t size);
virtual size_t ReadData(char *data, size_t size);
virtual size_t WriteData(const char *data, size_t size);
private:
bytearray m_Internal;