Utils: Make file of FileAPI an interface to be able to integrate custom file implementations when using

This commit is contained in:
Jan 2019-12-25 14:07:51 +01:00
parent 00b3322cb2
commit ce063adcc5
2 changed files with 32 additions and 17 deletions

View File

@ -77,12 +77,12 @@ FileAPI::File& FileAPI::File::operator=(File&& f) noexcept
return *this; return *this;
} }
bool FileAPI::File::IsOpen() const bool FileAPI::File::IsOpen()
{ {
return this->m_handle != nullptr; return this->m_handle != nullptr;
} }
size_t FileAPI::File::Read(void* buffer, const size_t elementSize, const size_t elementCount) const size_t FileAPI::File::Read(void* buffer, const size_t elementSize, const size_t elementCount)
{ {
if (!this->IsOpen()) if (!this->IsOpen())
return 0; return 0;
@ -90,7 +90,7 @@ size_t FileAPI::File::Read(void* buffer, const size_t elementSize, const size_t
return fread(buffer, elementSize, elementCount, static_cast<FILE*>(m_handle)); return fread(buffer, elementSize, elementCount, static_cast<FILE*>(m_handle));
} }
size_t FileAPI::File::Write(const void* data, const size_t elementSize, const size_t elementCount) const size_t FileAPI::File::Write(const void* data, const size_t elementSize, const size_t elementCount)
{ {
if (!this->IsOpen()) if (!this->IsOpen())
return 0; return 0;
@ -98,7 +98,7 @@ size_t FileAPI::File::Write(const void* data, const size_t elementSize, const si
return fwrite(data, elementSize, elementCount, static_cast<FILE*>(m_handle)); return fwrite(data, elementSize, elementCount, static_cast<FILE*>(m_handle));
} }
void FileAPI::File::Skip(const size_t amount) const void FileAPI::File::Skip(const size_t amount)
{ {
if(!this->IsOpen()) if(!this->IsOpen())
return; return;
@ -106,7 +106,7 @@ void FileAPI::File::Skip(const size_t amount) const
fseek(static_cast<FILE*>(m_handle), amount, SEEK_CUR); fseek(static_cast<FILE*>(m_handle), amount, SEEK_CUR);
} }
size_t FileAPI::File::Printf(const char* fmt, ...) const size_t FileAPI::File::Printf(const char* fmt, ...)
{ {
va_list ap; va_list ap;
@ -120,12 +120,12 @@ size_t FileAPI::File::Printf(const char* fmt, ...) const
return result; return result;
} }
int64_t FileAPI::File::Pos() const int64_t FileAPI::File::Pos()
{ {
return _ftelli64(static_cast<FILE*>(m_handle)); return _ftelli64(static_cast<FILE*>(m_handle));
} }
void FileAPI::File::Goto(const int64_t pos) const void FileAPI::File::Goto(const int64_t pos)
{ {
_fseeki64(static_cast<FILE*>(m_handle), pos, SEEK_SET); _fseeki64(static_cast<FILE*>(m_handle), pos, SEEK_SET);
} }

View File

@ -12,7 +12,22 @@ public:
MODE_WRITE = 1 MODE_WRITE = 1
}; };
class File class IFile
{
public:
virtual ~IFile() = default;
virtual bool IsOpen() = 0;
virtual size_t Read(void* buffer, size_t elementSize, size_t elementCount) = 0;
virtual size_t Write(const void* data, size_t elementSize, size_t elementCount) = 0;
virtual void Skip(size_t amount) = 0;
virtual size_t Printf(const char* fmt, ...) = 0;
virtual int64_t Pos() = 0;
virtual void Goto(int64_t pos) = 0;
virtual void Close() = 0;
};
class File final : public IFile
{ {
void* m_handle; void* m_handle;
@ -21,19 +36,19 @@ public:
explicit File(void* handle); explicit File(void* handle);
File(File&) = delete; File(File&) = delete;
File(File&& f) noexcept; File(File&& f) noexcept;
~File(); ~File() override;
File& operator=(File&) = delete; File& operator=(File&) = delete;
File& operator=(File&& f) noexcept; File& operator=(File&& f) noexcept;
bool IsOpen() const; bool IsOpen() override;
size_t Read(void* buffer, size_t elementSize, size_t elementCount) const; size_t Read(void* buffer, size_t elementSize, size_t elementCount) override;
size_t Write(const void* data, size_t elementSize, size_t elementCount) const; size_t Write(const void* data, size_t elementSize, size_t elementCount) override;
void Skip(size_t amount) const; void Skip(size_t amount) override;
size_t Printf(const char* fmt, ...) const; size_t Printf(const char* fmt, ...) override;
int64_t Pos() const; int64_t Pos() override;
void Goto(int64_t pos) const; void Goto(int64_t pos) override;
void Close(); void Close() override;
}; };
static bool FileExists(const std::string& fileName); static bool FileExists(const std::string& fileName);