AsyncFw 1.2
Async Framework is c++ runtime with timers, poll notifiers, sockets, coroutines, etc.
 
Loading...
Searching...
No Matches
DataArray.h
1/*
2Copyright (c) 2026 Alexandr Kuzmuk
3
4This file is part of the AsyncFw project. Licensed under the MIT License.
5See {Link: LICENSE file https://mit-license.org} in the project root for full license information.
6*/
7
8#pragma once
9
10#include <vector>
11#include <cstdint>
12#include <string>
13
14namespace AsyncFw {
15class DataArrayList;
16class DataArrayView;
17class LogStream;
18
20class DataArray : public std::vector<uint8_t> {
21public:
22 static DataArray compress(const DataArrayView &);
23 static DataArray uncompress(const DataArrayView &);
24 using std::vector<uint8_t>::vector;
25 DataArray(const std::string &);
26 DataArray(const char *);
27 DataArray(const char);
28 DataArray(const std::vector<char> &);
29 const DataArrayView view(std::size_t = 0, std::size_t = 0) const;
30 DataArray &operator+=(const DataArrayView &);
31 DataArray operator+(const DataArrayView &);
32 DataArray &operator+=(const char);
33 DataArray operator+(const char);
34};
35
37class DataArrayView : public std::string_view {
38public:
39 template <typename... Args>
40 DataArrayView(Args... args) : std::string_view(args...) {}
41 DataArrayView(const uint8_t *, std::size_t);
42 DataArrayView(const DataArray::iterator, const DataArray::iterator);
43 DataArrayView(const DataArray &);
44 DataArrayList split(const char) const;
45};
46
48class DataArrayList : public std::vector<DataArray> {
49public:
50 using std::vector<DataArray>::vector;
51 DataArray join(const char) const;
52};
53
55class DataStream {
56public:
57 DataStream();
58 DataStream(const DataArray &);
59 DataStream(const DataStream &) = delete;
60 ~DataStream();
61 DataStream &operator<<(int8_t);
62 DataStream &operator>>(int8_t &);
63 DataStream &operator<<(uint8_t);
64 DataStream &operator>>(uint8_t &);
65 DataStream &operator<<(int16_t);
66 DataStream &operator>>(int16_t &);
67 DataStream &operator<<(uint16_t);
68 DataStream &operator>>(uint16_t &);
69 DataStream &operator<<(int32_t);
70 DataStream &operator>>(int32_t &);
71 DataStream &operator<<(uint32_t);
72 DataStream &operator>>(uint32_t &);
73 DataStream &operator<<(int64_t);
74 DataStream &operator>>(int64_t &);
75 DataStream &operator<<(uint64_t);
76 DataStream &operator>>(uint64_t &);
77 DataStream &operator<<(float);
78 DataStream &operator>>(float &);
79 DataStream &operator<<(double);
80 DataStream &operator>>(double &);
81 DataStream &operator<<(const std::string &);
82 DataStream &operator>>(std::string &);
83 DataStream &operator<<(const DataArrayView &);
84 DataStream &operator<<(const DataArray &);
85 DataStream &operator>>(DataArray &);
86 DataStream &operator<<(const DataArrayList &);
87 DataStream &operator>>(DataArrayList &);
88 const DataArray &array() const { return *data_; }
89 bool fail() const { return fail_; }
90
91private:
92 template <typename T>
93 void rs_(T &_v, std::size_t _s) {
94 if (_s > data_->size() - pos_) {
95 fail_ = true;
96 return;
97 }
98 try {
99 _v.resize(_s);
100 } catch (std::exception &e) { fail_ = true; };
101 }
102 void w_(int, const uint8_t *);
103 void r_(int, uint8_t *);
104 void sw_(std::size_t);
105 void sr_(std::size_t *);
106 DataArray *data_;
107 bool fail_ = false;
108 bool read_ = false;
109 std::size_t pos_ = 0;
110};
111LogStream &operator<<(LogStream &, const DataArray &);
112LogStream &operator<<(LogStream &, const DataArrayView &);
113LogStream &operator<<(LogStream &, const DataArrayList &);
114LogStream &operator<<(LogStream &, const DataStream &);
115} // namespace AsyncFw
The DataArrayList class.
Definition DataArray.h:48
The DataArrayView class.
Definition DataArray.h:37
The DataArray class.
Definition DataArray.h:20
The DataStream class.
Definition DataArray.h:55
The LogStream class.
Definition LogStream.h:44