StormByte C++ Library 0.0.9999
StormByte is a comprehensive, cross-platform C++ library aimed at easing system programming, configuration management, logging, and database handling tasks. This library provides a unified API that abstracts away the complexities and inconsistencies of different platforms (Windows, Linux).
Loading...
Searching...
No Matches
shared.hxx
1#pragma once
2
3#include <StormByte/buffer/simple.hxx>
4
5#include <atomic>
6#include <cstddef>
7#include <memory>
8#include <mutex>
9#include <shared_mutex>
10#include <string>
11
25namespace StormByte::Buffer {
41 class STORMBYTE_PUBLIC Shared: public Simple {
42 public:
47 Shared() noexcept;
48
53 explicit Shared(const std::size_t& size);
54
60 Shared(const char* data, const std::size_t& length);
61
66 Shared(const std::string& data);
67
72 Shared(const Buffer::Data& data);
73
78 Shared(Buffer::Data&& data);
79
84 Shared(const std::span<const Byte>& data);
85
90 Shared(const Shared& other);
91
96 Shared(Shared&& other) noexcept;
97
102 Shared(const Simple& other);
103
108 Shared(Simple&& other) noexcept;
109
114 virtual ~Shared() noexcept override = default;
115
121 Shared& operator=(const Shared& other);
122
128 Shared& operator=(Shared&& other) noexcept;
129
134 Shared& operator<<(const Status& status);
135
140 Shared& operator<<(const Simple& buffer);
141
146 Shared& operator<<(Simple&& buffer);
147
152 Shared& operator<<(const std::string& data);
153
158 Shared& operator<<(const Buffer::Data& data);
159
164 Shared& operator<<(Buffer::Data&& data);
165
177 template <typename NumericType, typename = std::enable_if_t<std::is_arithmetic_v<std::decay_t<NumericType>>>>
178 Shared& operator<<(const NumericType& value) {
179 std::unique_lock lock(m_data_mutex);
180 Simple::operator<<(value);
181 return *this;
182 }
183
189
194 virtual size_t AvailableBytes() const noexcept;
195
200 size_t Capacity() const noexcept override;
201
206 void Clear() noexcept override;
207
212 Buffer::Data Data() const noexcept override;
213
218 void Discard(const std::size_t& length, const Read::Position& mode) noexcept override;
219
224 bool End() const noexcept override;
225
230 bool Empty() const noexcept override;
231
243 virtual ExpectedData<BufferOverflow> Extract(const size_t& length) override;
244
256 virtual Read::Status ExtractInto(const size_t& length, Shared& output) noexcept;
257
262 virtual bool HasEnoughData(const std::size_t& length) override;
263
268 std::string HexData(const std::size_t& column_size = 16) const override;
269
274 bool IsEoF() const noexcept override;
275
282 bool IsReadable() const noexcept;
283
290 bool IsWritable() const noexcept;
291
296 void Lock();
297
302 ExpectedByte<BufferOverflow> Peek() const override;
303
308 std::size_t Position() const noexcept override;
309
321 virtual ExpectedData<BufferOverflow> Read(const size_t& length) const override;
322
327 void Reserve(const std::size_t& size) override;
328
333 void Seek(const std::ptrdiff_t& position, const Read::Position& mode) const override;
334
339 std::size_t Size() const noexcept override;
340
344 enum Status Status() const noexcept;
345
350 void Unlock();
351
359 Write::Status Write(const Simple& buffer) override;
360
368 Write::Status Write(Simple&& buffer) override;
369
377 Write::Status Write(const std::string& data) override;
378
386 Write::Status Write(const Buffer::Data& data) override;
387
395 Write::Status Write(Buffer::Data&& data) override;
396
397 protected:
398 mutable std::shared_mutex m_data_mutex;
399 std::atomic<enum Status> m_status;
400
415 virtual Read::Status Wait(const std::size_t& length) noexcept;
416 };
417}
Exception class for buffer overflow errors.
Definition exception.hxx:48
A thread-safe version of the Simple buffer.
Definition shared.hxx:41
Shared & operator>>(Shared &buffer)
Appends current shared buffer to target shared buffer Thread-safe version of.
virtual size_t AvailableBytes() const noexcept
Gets the available bytes to read from current position.
Shared() noexcept
Default constructor Initializes an empty shared buffer.
A lightweight class for storing and manipulating simple byte buffers.
Definition simple.hxx:36
Namespace for buffer-related components in the StormByte library.
Namespace for read-related utilities in the StormByte library.
Namespace for buffer-related components in the StormByte library.
Definition consumer.hxx:19
Expected< Byte, T > ExpectedByte
Represents a single byte with error handling.
Definition typedefs.hxx:143
std::byte Byte
Represents a single byte of data.
Definition typedefs.hxx:138
Expected< Data, T > ExpectedData
Represents a collection of bytes with error handling.
Definition typedefs.hxx:155
std::vector< Byte > Data
Represents collection of bytes stored in the buffer.
Definition typedefs.hxx:139
Status
Defines the status of the buffer during producer/consumer operations.
Definition typedefs.hxx:106
Namespace for write-related utilities in the StormByte library.