SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Buffers.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 #ifndef swcdb_core_comm_Buffers_h
7 #define swcdb_core_comm_Buffers_h
8 
9 #include "swcdb/core/Buffer.h"
12 #include "swcdb/core/comm/Header.h"
13 #include "swcdb/core/comm/Event.h"
15 
16 
17 namespace SWC { namespace Comm {
18 
19 
20 class Buffers final {
21  public:
22 
23  typedef std::shared_ptr<Buffers> Ptr;
24 
25  /* Make Common */
27  static Ptr make(uint32_t reserve=0) {
28  return Ptr(new Buffers(reserve));
29  }
30 
32  static Ptr make(const Serializable& params, uint32_t reserve=0) {
33  return Ptr(new Buffers(params, reserve));
34  }
35 
37  static Ptr make(const Serializable& params, StaticBuffer& buffer,
38  uint32_t reserve=0) {
39  return Ptr(new Buffers(params, buffer, reserve));
40  }
41 
43  static Ptr make(StaticBuffer& buffer, uint32_t reserve=0) {
44  return Ptr(new Buffers(buffer, reserve));
45  }
46 
47 
48  /* Make Request */
50  static Ptr make(const Serializable& params, uint32_t reserve,
51  uint64_t cmd, uint32_t timeout) {
52  return Ptr(new Buffers(params, reserve, cmd, timeout));
53  }
54 
56  static Ptr make(const Serializable& params, StaticBuffer& buffer,
57  uint32_t reserve, uint64_t cmd, uint32_t timeout) {
58  return Ptr(new Buffers(params, buffer, reserve, cmd, timeout));
59  }
60 
61 
62  /* Make Response */
64  static Ptr make(const Event::Ptr& ev, uint32_t reserve=0) {
65  return Ptr(new Buffers(ev, reserve));
66  }
67 
69  static Ptr make(const Event::Ptr& ev,
70  const Serializable& params, uint32_t reserve=0) {
71  return Ptr(new Buffers(ev, params, reserve));
72  }
73 
75  static Ptr make(const Event::Ptr& ev,
76  const Serializable& params, StaticBuffer& buffer,
77  uint32_t reserve=0) {
78  return Ptr(new Buffers(ev, params, buffer, reserve));
79  }
80 
82  static Ptr make(const Event::Ptr& ev,
83  StaticBuffer& buffer, uint32_t reserve=0) {
84  return Ptr(new Buffers(ev, buffer, reserve));
85  }
86 
87  static Ptr create_error_message(const Event::Ptr& ev,
88  int error, const char *msg, uint16_t len);
89 
90 
91  /* Init Common */
92  Buffers(uint32_t reserve=0);
93 
94  Buffers(const Serializable& params, uint32_t reserve=0);
95 
96  Buffers(const Serializable& params, StaticBuffer& buffer,
97  uint32_t reserve=0);
98 
99  Buffers(StaticBuffer& buffer, uint32_t reserve=0);
100 
101  /* Init Request */
102  Buffers(const Serializable& params, uint32_t reserve,
103  uint64_t cmd, uint32_t timeout);
104 
105  Buffers(const Serializable& params, StaticBuffer& buffer,
106  uint32_t reserve,
107  uint64_t cmd, uint32_t timeout);
108 
109  /* Init Response */
110  Buffers(const Event::Ptr& ev, uint32_t reserve=0);
111 
112  Buffers(const Event::Ptr& ev,
113  const Serializable& params, uint32_t reserve=0);
114 
115  Buffers(const Event::Ptr& ev,
116  StaticBuffer& buffer, uint32_t reserve=0);
117 
118  Buffers(const Event::Ptr& ev,
119  const Serializable& params, StaticBuffer& buffer,
120  uint32_t reserve=0);
121 
122  Buffers(Buffers&&) = delete;
123  Buffers(const Buffers&) = delete;
124  Buffers& operator=(Buffers&&) = delete;
125  Buffers& operator=(const Buffers&) = delete;
126 
127  ~Buffers() noexcept;
128 
129  void set_data(uint32_t sz);
130 
131  void set_data(const Serializable& params, uint32_t reserve);
132 
134  void append_i8(uint8_t ival) noexcept {
136  }
137 
139  void append_i32(uint32_t ival) noexcept {
141  }
142 
145  if(buf_data.size) {
147  if(buf_ext.size)
149  }
150  }
151 
153  bool expired() const noexcept {
154  return expiry_ms && Time::now_ms() > expiry_ms;
155  }
156 
158 
160  return std::move(buf_ext);
161  }
162 
164  int64_t expiry_ms;
165  uint8_t* data_ptr;
166 
167  private:
168 
172 
173 
174 };
175 
176 
177 
181  int error, const char *msg, uint16_t len) {
182  auto cbp = Buffers::make(ev, 4 + Serialization::encoded_length_bytes(len));
183  Serialization::encode_i32(&cbp->data_ptr, error);
184  Serialization::encode_bytes(&cbp->data_ptr, msg, len);
185  return cbp;
186 }
187 
188 /* Init Common */
190 Buffers::Buffers(uint32_t reserve)
191  : header(), expiry_ms(0),
192  data_ptr(), buf_data(), buf_ext() {
193  if(reserve)
194  set_data(reserve);
195 }
196 
198 Buffers::Buffers(const Serializable& params, uint32_t reserve)
199  : header(), expiry_ms(0),
200  data_ptr(), buf_data(), buf_ext() {
201  set_data(params, reserve);
202 }
203 
206  uint32_t reserve)
207  : header(), expiry_ms(0),
208  data_ptr(), buf_data(), buf_ext(buffer) {
209  set_data(params, reserve);
210 }
211 
213 Buffers::Buffers(StaticBuffer& buffer, uint32_t reserve)
214  : header(), expiry_ms(0),
215  data_ptr(), buf_data(), buf_ext(buffer) {
216  if(reserve)
217  set_data(reserve);
218 }
219 
220 
221 /* Init Request */
223 Buffers::Buffers(const Serializable& params, uint32_t reserve,
224  uint64_t cmd, uint32_t timeout)
225  : header(cmd, timeout), expiry_ms(0),
226  data_ptr(), buf_data(), buf_ext() {
227  set_data(params, reserve);
228 }
229 
232  uint32_t reserve,
233  uint64_t cmd, uint32_t timeout)
234  : header(cmd, timeout), expiry_ms(0),
235  data_ptr(), buf_data(), buf_ext(buffer) {
236  set_data(params, reserve);
237 }
238 
239 
240 /* Init Response */
242 Buffers::Buffers(const Event::Ptr& ev, uint32_t reserve)
243  : header(ev->header), expiry_ms(ev->expiry_ms),
244  data_ptr(), buf_data(), buf_ext() {
245  if(reserve)
246  set_data(reserve);
247 }
248 
251  const Serializable& params, uint32_t reserve)
252  : header(ev->header), expiry_ms(ev->expiry_ms),
253  data_ptr(), buf_data(), buf_ext() {
254  set_data(params, reserve);
255 }
256 
259  const Serializable& params, StaticBuffer& buffer,
260  uint32_t reserve)
261  : header(ev->header), expiry_ms(ev->expiry_ms),
262  data_ptr(), buf_data(), buf_ext(buffer) {
263  set_data(params, reserve);
264 }
265 
268  StaticBuffer& buffer, uint32_t reserve)
269  : header(ev->header), expiry_ms(ev->expiry_ms),
270  data_ptr(), buf_data(), buf_ext(buffer) {
271  if(reserve)
272  set_data(reserve);
273 }
274 
275 
276 
277 }} // namespace SWC::Comm
278 
279 
280 
281 #ifdef SWC_IMPL_SOURCE
283 #endif
284 
285 #endif // swcdb_core_comm_Buffers_h
SWC::Comm::Buffers::Buffers
Buffers(uint32_t reserve=0)
Definition: Buffers.h:190
SWC::Comm::Buffers::set_data
void set_data(uint32_t sz)
Definition: Buffers.cc:21
SWC::Comm::BufferInfo::encode
SWC_CAN_INLINE void encode(uint8_t **bufp) const
Definition: HeaderBufferInfo.h:44
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Event::Ptr &ev, StaticBuffer &buffer, uint32_t reserve=0)
Definition: Buffers.h:82
SWC::Comm::Buffers::Ptr
std::shared_ptr< Buffers > Ptr
Definition: Buffers.h:23
SWC::Serialization::encoded_length_bytes
constexpr SWC_CAN_INLINE size_t encoded_length_bytes(size_t len) noexcept
Definition: Serialization.h:537
SWC::Comm::Buffers::data_ptr
uint8_t * data_ptr
Definition: Buffers.h:165
SWC::Core::Encoder::Type
Type
Definition: Encoder.h:28
SWC::Comm::Buffers::append_i32
SWC_CAN_INLINE void append_i32(uint32_t ival) noexcept
Definition: Buffers.h:139
SWC::Serialization::encode_i32
SWC_CAN_INLINE void encode_i32(uint8_t **bufp, uint32_t val) noexcept
Definition: Serialization.h:138
SWC::Comm::Buffers::Buffers
Buffers(Buffers &&)=delete
SWC::Comm::Buffers::create_error_message
static Ptr create_error_message(const Event::Ptr &ev, int error, const char *msg, uint16_t len)
Definition: Buffers.h:180
SWC::Comm::Buffers::operator=
Buffers & operator=(const Buffers &)=delete
SWC::Comm::Header::data
BufferInfo data
Data Buffer.
Definition: Header.h:81
SWC::Comm::Header::MAX_LENGTH
static const uint8_t MAX_LENGTH
Definition: Header.h:23
SWC::Comm::Buffers::prepare
SWC_CAN_INLINE void prepare(Core::Encoder::Type encoder)
Definition: Buffers.h:144
SWC::Serialization::encode_i8
constexpr SWC_CAN_INLINE void encode_i8(uint8_t **bufp, uint8_t val) noexcept
Definition: Serialization.h:85
SWC::Comm::Buffers::append_i8
SWC_CAN_INLINE void append_i8(uint8_t ival) noexcept
Definition: Buffers.h:134
SWC::Serialization::encode_bytes
SWC_CAN_INLINE void encode_bytes(uint8_t **bufp, const void *data, size_t len)
Definition: Serialization.h:542
SWC::Comm::Buffers::expiry_ms
int64_t expiry_ms
Definition: Buffers.h:164
SWC::Comm::Buffers::get_buffers
Core::Vector< asio::const_buffer > get_buffers()
Definition: Buffers.cc:37
encoder
Core::Encoder::Type encoder
Buffer Encoder.
Definition: HeaderBufferInfo.h:50
SWC::Comm::Header::data_ext
BufferInfo data_ext
Data Extended Buffer.
Definition: Header.h:82
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Event::Ptr &ev, uint32_t reserve=0)
Definition: Buffers.h:64
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::Comm::Buffers::header
Header header
Definition: Buffers.h:163
Buffers.cc
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Comm::Buffers::operator=
Buffers & operator=(Buffers &&)=delete
SWC::Core::Buffer
Definition: Buffer.h:18
SWC::Core::Buffer::size
size_t size
Definition: Buffer.h:130
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Serializable &params, StaticBuffer &buffer, uint32_t reserve=0)
Definition: Buffers.h:37
Serialization.h
SWC::Comm::Serializable
Definition: Serializable.h:18
SWC::Comm::Buffers::buf_header
uint8_t buf_header[Header::MAX_LENGTH]
Definition: Buffers.h:169
Buffer.h
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Event::Ptr &ev, const Serializable &params, StaticBuffer &buffer, uint32_t reserve=0)
Definition: Buffers.h:75
Event.h
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(StaticBuffer &buffer, uint32_t reserve=0)
Definition: Buffers.h:43
SWC::Comm::Buffers
Definition: Buffers.h:20
Serializable.h
asio_wrap.h
SWC::Core::Vector
Definition: Vector.h:14
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(uint32_t reserve=0)
Definition: Buffers.h:27
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Serializable &params, uint32_t reserve, uint64_t cmd, uint32_t timeout)
Definition: Buffers.h:50
SWC::Comm::Buffers::buf_data
StaticBuffer buf_data
Definition: Buffers.h:170
SWC::Time::now_ms
SWC_CAN_INLINE int64_t now_ms() noexcept
Definition: Time.h:36
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Event::Ptr &ev, const Serializable &params, uint32_t reserve=0)
Definition: Buffers.h:69
SWC::Comm::Event::Ptr
std::shared_ptr< Event > Ptr
Definition: Event.h:33
SWC::Comm::Buffers::~Buffers
~Buffers() noexcept
Definition: Buffers.cc:16
SWC::Comm::Buffers::moveout_buf_ext
StaticBuffer && moveout_buf_ext() noexcept
Definition: Buffers.h:159
SWC::Comm::Header
Definition: Header.h:18
SWC::Comm::Buffers::Buffers
Buffers(const Buffers &)=delete
Header.h
SWC::Comm::Buffers::expired
SWC_CAN_INLINE bool expired() const noexcept
Definition: Buffers.h:153
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Serializable &params, uint32_t reserve=0)
Definition: Buffers.h:32
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(const Serializable &params, StaticBuffer &buffer, uint32_t reserve, uint64_t cmd, uint32_t timeout)
Definition: Buffers.h:56
SWC::Comm::Buffers::buf_ext
StaticBuffer buf_ext
Definition: Buffers.h:171