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
24namespace StormByte::Buffer {
40 class STORMBYTE_PUBLIC Shared: public Simple {
41 public:
46 Shared() noexcept;
47
52 explicit Shared(const std::size_t& size);
53
59 Shared(const char* data, const std::size_t& length);
60
65 Shared(const std::string& data);
66
71 Shared(const Buffer::Data& data);
72
77 Shared(Buffer::Data&& data);
78
83 Shared(const std::span<const Byte>& data);
84
89 Shared(const Shared& other);
90
95 Shared(Shared&& other) noexcept;
96
101 virtual ~Shared() noexcept override = default;
102
108 Shared& operator=(const Shared& other);
109
115 Shared& operator=(Shared&& other) noexcept;
116
121 Shared& operator<<(const Status& status);
122
127 Shared& operator<<(const Simple& buffer);
128
133 Shared& operator<<(Simple&& buffer);
134
139 Shared& operator<<(const std::string& data);
140
145 Shared& operator<<(const Buffer::Data& data);
146
151 Shared& operator<<(Buffer::Data&& data);
152
164 template <typename NumericType, typename = std::enable_if_t<std::is_arithmetic_v<std::decay_t<NumericType>>>>
165 Shared& operator<<(const NumericType& value) {
166 std::unique_lock lock(m_data_mutex);
167 Simple::operator<<(value);
168 return *this;
169 }
170
176
181 virtual size_t AvailableBytes() const noexcept;
182
187 size_t Capacity() const noexcept override;
188
193 void Clear() noexcept override;
194
199 Buffer::Data Data() const noexcept override;
200
205 void Discard(const std::size_t& length, const Read::Position& mode) noexcept override;
206
211 bool End() const noexcept override;
212
217 bool Empty() const noexcept override;
218
230 ExpectedData<BufferOverflow> Extract(const size_t& length) override;
231
243 Read::Status ExtractInto(const size_t& length, Shared& output) noexcept;
244
249 bool HasEnoughData(const std::size_t& length) const override;
250
255 std::string HexData(const std::size_t& column_size = 16) const override;
256
261 bool IsEoF() const noexcept override;
262
269 bool IsReadable() const noexcept;
270
277 bool IsWritable() const noexcept;
278
283 void Lock();
284
289 ExpectedByte<BufferOverflow> Peek() const override;
290
295 std::size_t Position() const noexcept override;
296
308 ExpectedData<BufferOverflow> Read(const size_t& length) const override;
309
314 void Reserve(const std::size_t& size) override;
315
320 void Seek(const std::ptrdiff_t& position, const Read::Position& mode) const override;
321
326 std::size_t Size() const noexcept override;
327
331 enum Status Status() const noexcept;
332
337 void Unlock();
338
346 Write::Status Write(const Simple& buffer) override;
347
355 Write::Status Write(Simple&& buffer) override;
356
364 Write::Status Write(const std::string& data) override;
365
373 Write::Status Write(const Buffer::Data& data) override;
374
382 Write::Status Write(Buffer::Data&& data) override;
383
384 protected:
385 mutable std::shared_mutex m_data_mutex;
386 std::atomic<enum Status> m_status;
387
402 Read::Status Wait(const std::size_t length) const noexcept;
403 };
404}
Exception class for buffer overflow errors.
Definition exception.hxx:48
A thread-safe version of the Simple buffer.
Definition shared.hxx:40
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:37
Namespace for buffer-related components in the StormByte library.
Namespace for read-related utilities in the StormByte library.
Namespace for write-related utilities in the StormByte library.