RavEngine
Loading...
Searching...
No Matches
Stream.hpp
1
#pragma once
2
#include <cstddef>
3
#include <span>
4
#include <fstream>
5
6
namespace
RavEngine
{
7
8
enum class
IStreamStatus {
9
Success,
10
EndOfStream,
11
Unknown
12
};
13
14
struct
IStreamResult
{
15
size_t
bytesRead;
16
IStreamStatus status;
17
};
18
19
struct
IStream
{
20
21
virtual
IStreamResult
read(std::span<std::byte>
outData
) = 0;
22
virtual
void
reset() = 0;
23
24
template
<
typename
T>
25
IStreamResult
readT(T* data) {
26
return
read({
reinterpret_cast<
std::byte*
>
(data),
sizeof
(T) });
27
}
28
29
virtual
void
advance(
size_t
) = 0;
30
31
virtual
size_t
size() = 0;
32
virtual
size_t
current_pos() = 0;
33
};
34
35
36
class
MemoryStream
:
public
IStream
{
37
std::span<std::byte> data;
38
size_t
offset = 0;
39
public
:
40
MemoryStream
(
const
decltype
(data)& data) : data(data) {};
41
42
IStreamResult
read(std::span<std::byte>
outData
)
final
;
43
44
void
reset()
final
;
45
void
advance(
size_t
)
final
;
46
47
size_t
size()
final
;
48
size_t
current_pos()
final
;
49
};
50
51
class
FileStream
:
public
IStream
{
52
std::ifstream input;
53
std::streampos begin;
54
public
:
55
FileStream
(
decltype
(input) && input);
56
57
IStreamResult
read(std::span<std::byte>
outData
)
final
;
58
59
void
reset()
final
;
60
void
advance(
size_t
)
final
;
61
62
size_t
size()
final
;
63
size_t
current_pos()
final
;
64
};
65
}
RavEngine::FileStream
Definition
Stream.hpp:51
RavEngine::MemoryStream
Definition
Stream.hpp:36
moodycamel::ConcurrentQueue
Definition
concurrentqueue.h:747
RavEngine
Definition
Animation.hpp:6
RavEngine::IStreamResult
Definition
Stream.hpp:14
RavEngine::IStream
Definition
Stream.hpp:19
RavEngine
include
RavEngine
Stream.hpp
Generated by
1.9.8