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
simple.hxx
1#pragma once
2
3#include <StormByte/buffer/exception.hxx>
4#include <StormByte/buffer/typedefs.hxx>
5#include <StormByte/visibility.h>
6
7#include <functional>
8
21namespace StormByte::Buffer {
37 class STORMBYTE_PUBLIC Simple {
38 public:
43 Simple() noexcept;
44
49 explicit Simple(const std::size_t& size);
50
57 Simple(const char* data, const std::size_t& length);
58
63 Simple(const std::string& data);
64
69 Simple(const Data& data);
70
75 Simple(Data&& data);
76
81 Simple(const std::span<const Byte>& data);
82
87 Simple(const Simple& other) = default;
88
93 Simple(Simple&& other) noexcept = default;
94
99 virtual ~Simple() noexcept = default;
100
106 Simple& operator=(const Simple& other) = default;
107
113 Simple& operator=(Simple&& other) noexcept = default;
114
121 virtual Simple& operator<<(const Data& data);
122
128 virtual Simple& operator<<(Data&& data);
129
135 virtual Simple& operator<<(const Simple& buffer);
136
142 virtual Simple& operator<<(Simple&& buffer);
143
149 virtual Simple& operator<<(const std::string& data);
150
162 template <typename NumericType, typename = std::enable_if_t<std::is_arithmetic_v<std::decay_t<NumericType>>>>
163 Simple& operator<<(const NumericType& value) {
164 const auto* raw_data = reinterpret_cast<const std::byte*>(&value);
165 m_data.insert(m_data.end(), raw_data, raw_data + sizeof(NumericType));
166 return *this;
167 }
168
174 virtual Simple& operator>>(Simple& buffer);
175
180 virtual size_t AvailableBytes() const noexcept;
181
186 virtual size_t Capacity() const noexcept;
187
192 virtual void Clear();
193
203 virtual Buffer::Data Data() const noexcept;
204
217 virtual void Discard(const std::size_t& length, const Read::Position& mode = Read::Position::Relative) noexcept;
218
223 virtual bool Empty() const noexcept;
224
229 virtual bool End() const noexcept;
230
237 virtual ExpectedData<BufferOverflow> Extract(const size_t& length);
238
251 virtual Read::Status ExtractInto(const size_t& length, Simple& output) noexcept;
252
258 virtual bool HasEnoughData(const std::size_t& length) const;
259
269 virtual std::string HexData(const std::size_t& column_size = 16) const;
270
275 virtual bool IsEoF() const noexcept;
276
287 virtual ExpectedByte<BufferOverflow> Peek() const;
288
293 virtual std::size_t Position() const noexcept;
294
311 Read::Status Process(const std::size_t& length, Processor function, Simple& output) noexcept;
312
325 virtual ExpectedData<BufferOverflow> Read(const size_t& length) const;
326
332 virtual void Reserve(const std::size_t& size);
333
339 virtual void Seek(const std::ptrdiff_t& position, const Read::Position& mode) const;
340
345 virtual std::size_t Size() const noexcept;
346
357 const std::span<const Byte> Span() const noexcept;
358
369 std::span<Byte> Span() noexcept;
370
379 virtual Write::Status Write(const Buffer::Data& data);
380
389 virtual Write::Status Write(Buffer::Data&& data);
390
399 virtual Write::Status Write(const Simple& buffer);
400
409 virtual Write::Status Write(Simple&& buffer);
410
419 virtual Write::Status Write(const std::string& data);
420
421 protected:
422 std::vector<std::byte> m_data;
423 mutable std::size_t m_position;
424 mutable std::size_t m_minimum_chunk_size;
425 };
426}
Exception class for buffer overflow errors.
Definition exception.hxx:48
A lightweight class for storing and manipulating simple byte buffers.
Definition simple.hxx:37
virtual Simple & operator>>(Simple &buffer)
Appends current simple buffer to target simple buffer.
virtual size_t AvailableBytes() const noexcept
Gets the available bytes to read from current position.
Simple() noexcept
Default constructor Initializes an empty simple buffer.
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.