aboutsummaryrefslogtreecommitdiff
path: root/include/cru/common/io/BufferStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/common/io/BufferStream.h')
-rw-r--r--include/cru/common/io/BufferStream.h20
1 files changed, 9 insertions, 11 deletions
diff --git a/include/cru/common/io/BufferStream.h b/include/cru/common/io/BufferStream.h
index a95b3487..b3a5e9d1 100644
--- a/include/cru/common/io/BufferStream.h
+++ b/include/cru/common/io/BufferStream.h
@@ -31,13 +31,18 @@ struct BufferStreamOptions {
* @brief Total size limit of saved data in buffer. Use default value if < 0.
* No limit if == 0.
*
- * The size will be ceil(total_size_limit / block_size). When the buffer is
+ * The size will be floor(total_size_limit / block_size). When the buffer is
* filled, it will block and wait for user to read to get free space of buffer
* to continue read.
*/
Index total_size_limit = 0;
};
+/**
+ * @brief SPSC (Single Producer Single Consumer) buffer stream.
+ *
+ * If used by multiple producer or multiple consumer, the behavior is undefined.
+ */
class BufferStream : public Stream {
public:
/**
@@ -50,7 +55,7 @@ class BufferStream : public Stream {
* Actually I have no ideas about the best value for this. May change it later
* when I get some ideas.
*/
- constexpr static Index kDefaultTotalSizeLimit = 1024;
+ constexpr static Index kDefaultTotalSizeLimit = 1024 * 1024;
public:
BufferStream(const BufferStreamOptions& options);
@@ -63,19 +68,12 @@ class BufferStream : public Stream {
bool CanRead() override;
Index Read(std::byte* buffer, Index offset, Index size) override;
- bool CanWrite() = 0;
- Index Write(const std::byte* buffer, Index offset, Index size) = 0;
-
- virtual void Flush();
-
- virtual void Close();
+ bool CanWrite() override;
+ Index Write(const std::byte* buffer, Index offset, Index size) override;
void SetEof();
private:
- bool CheckClosed();
-
- private:
Index block_size_;
Index total_size_limit_;
Index block_count_limit_;