mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 00:02:55 +00:00
Utils: Make file of FileAPI an interface to be able to integrate custom file implementations when using
This commit is contained in:
parent
00b3322cb2
commit
ce063adcc5
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user