CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
Stream.Buffered.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Stream.Filtered.hpp"
11
12namespace CeresEngine {
13
18
19 private: // Read Buffer
22
23 public:
26 explicit BufferedInputStream(InputStream&& inputStream, size_t bufferSize = 1024);
27
30
33
34 public: // IInputStream interface
36 void seek(std::streamsize position, Seek mode = Seek::Start) final;
37
39 [[nodiscard]] size_t tell() final;
40
42 [[nodiscard]] size_t read(void* data, size_t n) final;
43
46
47 private:
49 };
50
55
56 private: // Write Buffer
59
60 public:
63 explicit BufferedOutputStream(OutputStream&& outputStream, size_t bufferSize = 1024);
64
67
70
71 public: // IOutputStream interface
73 void seek(std::streamsize position, Seek mode = Seek::Start) final;
74
76 [[nodiscard]] size_t tell() final;
77
79 [[nodiscard]] size_t write(const void* data, size_t n) final;
80
82 [[nodiscard]] bool flush() final;
83
84 private:
85 void flushWriteBuffer();
86 };
87
92
93 private:
95 size_t mPosition = 0;
96
97 private: // Read Buffer
100 void* mReadBuffer = nullptr;
101
103 const size_t mReadBufferSize = 0;
104
108
109 private: // Write Buffer
112 void* mWriteBuffer = nullptr;
113
115 const size_t mWriteBufferSize = 0;
116
120
121 public:
124 explicit BufferedDataStream(DataStream&& dataStream, size_t readBufferSize = 1024, size_t writeBufferSize = 1024);
125
128
135 static BufferedDataStream createReadBufferedStream(DataStream&& dataStream, const size_t readBufferSize = 1024) {
136 return BufferedDataStream(std::move(dataStream), readBufferSize, 0);
137 }
138
148
151
152 public: // IDataStream interface
154 void seek(std::streamsize position, Seek mode = Seek::Start) final;
155
157 [[nodiscard]] bool isTellable() const noexcept final { return true; }
158
160 [[nodiscard]] size_t tell() final { return mPosition; }
161
163 [[nodiscard]] size_t read(void* data, size_t n) final;
164
167
169 [[nodiscard]] size_t write(const void* data, size_t n) final;
170
172 [[nodiscard]] bool flush() final;
173
174 private:
176 void flushWriteBuffer();
177 };
178
179} // namespace CeresEngine
A filtered DataStream that caches read and write operations to it's underlying DataStream.
Definition Stream.Buffered.hpp:90
TRange< size_t > mReadBufferRange
The current read buffer range.
Definition Stream.Buffered.hpp:107
bool invalidate() final
In the stream is buffered, invalidates any buffered read data from the stream.
static BufferedDataStream createWriteBufferedStream(DataStream &&dataStream, const size_t writeBufferSize=1024)
Creates a new buffered DataStream that only buffers write operations.
Definition Stream.Buffered.hpp:145
~BufferedDataStream() final
Destroys the buffered data stream.
BufferedDataStream(const BufferedDataStream &)=delete
BufferedDataStream(DataStream &&dataStream, size_t readBufferSize=1024, size_t writeBufferSize=1024)
Creates a new buffer data stream.
TRange< size_t > mWriteBufferRange
The current write buffer range.
Definition Stream.Buffered.hpp:119
size_t tell() final
Gets the absolute stream position, in bytes.
Definition Stream.Buffered.hpp:160
BufferedDataStream(BufferedDataStream &&) noexcept
size_t read(void *data, size_t n) final
Reads data from the data stream to a buffer of raw memory data with length n.
A filtered InputStream that caches read and write operations to it's underlying InputStream.
Definition Stream.Buffered.hpp:16
size_t tell() final
Gets the absolute stream position, in bytes.
void seek(std::streamsize position, Seek mode=Seek::Start) final
Changes the position of the data stream.
BufferedInputStream(BufferedInputStream &&) noexcept
BufferedInputStream(InputStream &&inputStream, size_t bufferSize=1024)
Creates a new buffer data stream.
bool invalidate() final
In the stream is buffered, invalidates any buffered read data from the stream.
ByteMemoryView mBufferData
Definition Stream.Buffered.hpp:21
BufferedInputStream(const BufferedInputStream &)=delete
ByteMemoryView mBuffer
Definition Stream.Buffered.hpp:20
A filtered OutputStream that caches read and write operations to it's underlying OutputStream.
Definition Stream.Buffered.hpp:53
ByteMemoryView mBuffer
Definition Stream.Buffered.hpp:57
BufferedOutputStream(const BufferedOutputStream &)=delete
BufferedOutputStream(OutputStream &&outputStream, size_t bufferSize=1024)
Creates a new buffer data stream.
size_t mBufferPosition
Definition Stream.Buffered.hpp:58
BufferedOutputStream(BufferedOutputStream &&) noexcept
General purpose class used for encapsulating the reading and writing of data from and to various sour...
Definition Stream.hpp:460
A helper data stream that allows filtering the results of another data stream.
Definition Stream.Filtered.hpp:172
A helper data stream that allows filtering the results of another data stream.
Definition Stream.Filtered.hpp:16
bool isTellable() const noexcept override
Checks if the stream knows it's current absolute position.
Definition Stream.Filtered.hpp:49
A helper data stream that allows filtering the results of another data stream.
Definition Stream.Filtered.hpp:93
Optional< T > read()
Reads a trivially copyable obhect from the stream.
Definition Stream.hpp:193
Seek
An enumeration that describes how a data stream should be seeked.
Definition Stream.hpp:72
A stream that provides read-only stream functionality.
Definition Stream.hpp:210
A stream that provides write-only stream functionality.
Definition Stream.hpp:307
Definition Application.hpp:19
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Span.hpp:668