2013-06-30 10:46:29 +02:00
|
|
|
#pragma once
|
2015-04-24 23:38:11 +02:00
|
|
|
#include "Utilities/File.h"
|
2013-06-30 10:46:29 +02:00
|
|
|
|
|
|
|
|
struct vfsStream
|
|
|
|
|
{
|
2015-04-19 15:19:24 +02:00
|
|
|
vfsStream() = default;
|
2013-06-30 10:46:29 +02:00
|
|
|
|
2015-04-19 15:19:24 +02:00
|
|
|
virtual ~vfsStream()
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
}
|
2013-06-30 10:46:29 +02:00
|
|
|
|
2015-04-19 15:19:24 +02:00
|
|
|
virtual bool Close()
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2013-06-30 10:46:29 +02:00
|
|
|
|
2015-04-19 15:19:24 +02:00
|
|
|
virtual u64 GetSize() const = 0;
|
2013-06-30 10:46:29 +02:00
|
|
|
|
2015-04-19 15:19:24 +02:00
|
|
|
virtual u64 Write(const void* src, u64 count) = 0;
|
2015-04-16 01:17:42 +02:00
|
|
|
|
2015-05-28 17:14:22 +02:00
|
|
|
template<typename T> force_inline bool SWrite(const T& data, u64 count = sizeof(T))
|
2015-04-16 01:17:42 +02:00
|
|
|
{
|
2015-04-19 15:19:24 +02:00
|
|
|
return Write(&data, count) == count;
|
2015-04-16 01:17:42 +02:00
|
|
|
}
|
|
|
|
|
|
2015-04-19 15:19:24 +02:00
|
|
|
virtual u64 Read(void* dst, u64 count) = 0;
|
2013-06-30 10:46:29 +02:00
|
|
|
|
2015-05-28 17:14:22 +02:00
|
|
|
template<typename T> force_inline bool SRead(T& data, u64 count = sizeof(T))
|
2015-04-16 01:17:42 +02:00
|
|
|
{
|
2015-04-19 15:19:24 +02:00
|
|
|
return Read(&data, count) == count;
|
2015-04-16 01:17:42 +02:00
|
|
|
}
|
|
|
|
|
|
2015-04-19 15:19:24 +02:00
|
|
|
virtual u64 Seek(s64 offset, u32 mode = from_begin) = 0;
|
|
|
|
|
|
|
|
|
|
virtual u64 Tell() const = 0;
|
|
|
|
|
|
|
|
|
|
virtual bool Eof() const
|
|
|
|
|
{
|
|
|
|
|
return Tell() >= GetSize();
|
|
|
|
|
}
|
2013-06-30 10:46:29 +02:00
|
|
|
|
2015-04-19 15:19:24 +02:00
|
|
|
virtual bool IsOpened() const = 0;
|
2015-04-16 17:33:55 +02:00
|
|
|
};
|