RavEngine
Loading...
Searching...
No Matches
Stream.hpp
1#pragma once
2#include <cstddef>
3#include <span>
4#include <fstream>
5
6namespace RavEngine {
7
8 enum class IStreamStatus {
9 Success,
10 EndOfStream,
11 Unknown
12 };
13
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}
Definition Stream.hpp:51
Definition Stream.hpp:36
Definition concurrentqueue.h:747
Definition Animation.hpp:6
Definition Stream.hpp:14
Definition Stream.hpp:19