2013-06-30 11:46:29 +03:00
|
|
|
#pragma once
|
2015-08-12 04:52:26 +03:00
|
|
|
|
2013-06-30 11:46:29 +03:00
|
|
|
struct vfsStream
|
|
|
|
|
{
|
2015-04-19 16:19:24 +03:00
|
|
|
vfsStream() = default;
|
2013-06-30 11:46:29 +03:00
|
|
|
|
2015-04-19 16:19:24 +03:00
|
|
|
virtual ~vfsStream()
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
}
|
2013-06-30 11:46:29 +03:00
|
|
|
|
2016-01-06 02:52:48 +03:00
|
|
|
virtual void Close()
|
2015-04-19 16:19:24 +03:00
|
|
|
{
|
|
|
|
|
}
|
2013-06-30 11:46:29 +03:00
|
|
|
|
2015-04-19 16:19:24 +03:00
|
|
|
virtual u64 GetSize() const = 0;
|
2013-06-30 11:46:29 +03:00
|
|
|
|
2015-04-19 16:19:24 +03:00
|
|
|
virtual u64 Write(const void* src, u64 count) = 0;
|
2015-04-16 02:17:42 +03:00
|
|
|
|
2016-01-26 21:13:36 +03:00
|
|
|
template<typename T>
|
|
|
|
|
force_inline bool SWrite(const T& data, u64 count = sizeof(T))
|
2015-04-16 02:17:42 +03:00
|
|
|
{
|
2015-04-19 16:19:24 +03:00
|
|
|
return Write(&data, count) == count;
|
2015-04-16 02:17:42 +03:00
|
|
|
}
|
|
|
|
|
|
2015-04-19 16:19:24 +03:00
|
|
|
virtual u64 Read(void* dst, u64 count) = 0;
|
2013-06-30 11:46:29 +03:00
|
|
|
|
2016-01-26 21:13:36 +03:00
|
|
|
template<typename T>
|
|
|
|
|
force_inline bool SRead(T& data, u64 count = sizeof(T))
|
2015-04-16 02:17:42 +03:00
|
|
|
{
|
2015-04-19 16:19:24 +03:00
|
|
|
return Read(&data, count) == count;
|
2015-04-16 02:17:42 +03:00
|
|
|
}
|
|
|
|
|
|
2016-01-26 21:13:36 +03:00
|
|
|
template<typename T>
|
|
|
|
|
bool VWrite(const std::vector<T>& vec)
|
|
|
|
|
{
|
|
|
|
|
return IsOpened() && Write(vec.data(), vec.size() * sizeof(T)) == vec.size() * sizeof(T);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
std::vector<T> VRead()
|
|
|
|
|
{
|
|
|
|
|
std::vector<T> result;
|
|
|
|
|
if (IsOpened() == false)
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result.resize(GetSize() / sizeof(T));
|
|
|
|
|
|
|
|
|
|
if (Seek(0) == -1 || Read(result.data(), result.size() * sizeof(T)) != result.size() * sizeof(T))
|
|
|
|
|
{
|
|
|
|
|
result.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2016-01-06 02:52:48 +03:00
|
|
|
virtual u64 Seek(s64 offset, fs::seek_mode whence = fs::seek_set) = 0;
|
2015-04-19 16:19:24 +03:00
|
|
|
|
|
|
|
|
virtual u64 Tell() const = 0;
|
|
|
|
|
|
|
|
|
|
virtual bool Eof() const
|
|
|
|
|
{
|
|
|
|
|
return Tell() >= GetSize();
|
|
|
|
|
}
|
2013-06-30 11:46:29 +03:00
|
|
|
|
2015-04-19 16:19:24 +03:00
|
|
|
virtual bool IsOpened() const = 0;
|
2015-04-16 18:33:55 +03:00
|
|
|
};
|