SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
CellValueSerialFieldUpdate.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 
7 #ifndef swcdb_db_cells_CellValueSerialFieldUpdate_h
8 #define swcdb_db_cells_CellValueSerialFieldUpdate_h
9 
11 #include <set>
12 
13 
14 namespace SWC { namespace DB { namespace Cell {
15 
16 
17 
19 namespace Serial {
20 
21 
22 
24 namespace Value {
25 
26 
27 
28 //
29 class FieldUpdate {
30  public:
31  static constexpr const uint8_t CTRL_DEFAULT = 0x00;
32  static constexpr const uint8_t CTRL_NO_ADD_FIELD = 0x01;
33  static constexpr const uint8_t CTRL_DELETE_FIELD = 0x02;
34  static constexpr const uint8_t CTRL_VALUE_SET = 0x04;
35  static constexpr const uint8_t CTRL_VALUE_DEL = 0x08;
37  FieldUpdate(uint8_t a_ctrl) noexcept : ctrl(a_ctrl) { }
39  FieldUpdate(const uint8_t** ptrp, size_t* remainp)
40  : ctrl(Serialization::decode_i8(ptrp, remainp)) {
41  }
42  FieldUpdate(FieldUpdate&&) noexcept = default;
43  FieldUpdate& operator=(FieldUpdate&&) noexcept = default;
44  FieldUpdate(const FieldUpdate&) = delete;
45  FieldUpdate& operator=(const FieldUpdate&) = delete;
46  virtual ~FieldUpdate() noexcept { }
48  bool set_ctrl(const char** ptr, uint32_t* remainp,
49  bool w_value_ctrl) noexcept {
50  if(*remainp && **ptr == '!') {
52  ++*ptr;
53  --*remainp;
54  }
55  if(w_value_ctrl && *remainp) {
56  if(**ptr == 'I') {
57  set_value_set();
58  ++*ptr;
59  --*remainp;
60  return false;
61  } else if(**ptr == 'O') {
62  set_value_del();
63  ++*ptr;
64  --*remainp;
65  return false;
66  }
67  }
68  if(*remainp >= 3 && Condition::str_eq(*ptr, "DEL", 3)) {
70  *ptr += 3;
71  *remainp -=3;
72  return false;
73  }
74  return true;
75  }
77  void set_no_add_field() noexcept {
79  }
81  bool is_no_add_field() const noexcept {
82  return ctrl & CTRL_NO_ADD_FIELD;
83  }
85  void set_delete_field() noexcept {
87  }
89  bool is_delete_field() const noexcept {
90  return ctrl & CTRL_DELETE_FIELD;
91  }
93  void set_value_set() noexcept {
95  }
97  bool is_value_set() const noexcept {
98  return ctrl & CTRL_VALUE_SET;
99  }
101  void set_value_del() noexcept {
102  ctrl |= CTRL_VALUE_DEL;
103  }
105  bool is_value_del() const noexcept {
106  return ctrl & CTRL_VALUE_DEL;
107  }
109  bool is_sub_op_required() const noexcept {
110  return !(is_value_del() || is_value_set() || is_delete_field());
111  }
113  virtual uint24_t encoded_length() const noexcept {
114  return 1;
115  }
117  virtual void encode(uint8_t** bufp) const {
119  }
121  virtual void decode(const uint8_t** ptrp, size_t* remainp) {
122  ctrl = Serialization::decode_i8(ptrp, remainp);
123  }
124  virtual std::ostream& print(std::ostream& out) const;
125 
126  uint8_t ctrl;
127 };
128 
129 
130 //
132  public:
133  enum OP : uint8_t {
134  EQUAL = 0x00,
135  PLUS = 0x01,
136  MULTIPLY = 0x02,
137  DIVIDE = 0x03
138  };
140  FieldUpdate_MATH(OP a_op=OP::EQUAL, uint8_t a_ctrl=CTRL_DEFAULT) noexcept
141  : FieldUpdate(a_ctrl), op(a_op) {
142  }
144  FieldUpdate_MATH(const uint8_t** ptrp, size_t* remainp)
145  : FieldUpdate(ptrp, remainp),
147  ? OP(Serialization::decode_i8(ptrp, remainp))
148  : OP::EQUAL
149  ) {
150  }
151  FieldUpdate_MATH(FieldUpdate_MATH&&) noexcept = default;
152  FieldUpdate_MATH& operator=(FieldUpdate_MATH&&) noexcept = default;
154  FieldUpdate_MATH& operator=(const FieldUpdate_MATH&) = delete;
156  void set_op(const char** ptr, uint32_t* remainp,
157  bool w_value_ctrl=false) noexcept {
158  if(!set_ctrl(ptr, remainp, w_value_ctrl))
159  return;
160  uint8_t len = 0;
161  if(*remainp >= 2) {
162  if(Condition::str_eq(*ptr, "+=", 2)) {
163  op = OP::PLUS;
164  len += 2;
165  } else if(Condition::str_eq(*ptr, "*=", 2)) {
166  op = OP::MULTIPLY;
167  len += 2;
168  } else if(Condition::str_eq(*ptr, "/=", 2)) {
169  op = OP::DIVIDE;
170  len += 2;
171  } else if(Condition::str_eq(*ptr, "==", 2)) {
172  op = OP::EQUAL;
173  len += 2;
174  }
175  }
176  if(!len) {
177  op = OP::EQUAL;
178  if(*remainp && **ptr == '=')
179  ++len;
180  }
181  *ptr += len;
182  *remainp -= len;
183  }
184  template<typename T>
186  void apply(const T& in_value, T& value) const {
187  switch(op) {
188  case OP::EQUAL: {
189  value = in_value;
190  break;
191  }
192  case OP::PLUS: {
193  value += in_value;
194  break;
195  }
196  case OP::MULTIPLY: {
197  value *= in_value;
198  break;
199  }
200  case OP::DIVIDE: {
201  if(in_value)
202  value /= in_value;
203  break;
204  }
205  default: {
206  break;
207  }
208  }
209  }
210  template<typename T>
212  void apply(const Field* infieldp, T& field) const {
213  apply(reinterpret_cast<const T*>(infieldp)->value, field.value);
214  }
215  template<typename T>
218  const T& p1, const T& p2) const noexcept {
219  return Condition::is_matching(comp, p1, p2);
220  }
222  uint24_t encoded_length() const noexcept override {
224  }
226  void encode(uint8_t** bufp) const override {
227  FieldUpdate::encode(bufp);
228  if(is_sub_op_required())
229  Serialization::encode_i8(bufp, uint8_t(op));
230  }
232  void decode(const uint8_t** ptrp, size_t* remainp) override {
233  FieldUpdate::decode(ptrp, remainp);
234  if(is_sub_op_required())
235  op = OP(Serialization::decode_i8(ptrp, remainp));
236  }
237  virtual std::ostream& print(std::ostream& out) const override;
238 
240 };
241 
242 //
244  public:
245  enum OP : uint8_t {
246  REPLACE = 0x00,
247  APPEND = 0x01,
248  PREPEND = 0x02,
249  INSERT = 0x03,
250  OVERWRITE = 0x04,
251  ERASE = 0x05,
252  BY_UNIQUE = 0x06,
253  BY_COND = 0x07,
254  BY_INDEX = 0x08
255  };
257  FieldUpdate_LIST(OP a_op=OP::REPLACE, uint24_t a_pos=0,
258  uint8_t a_ctrl=CTRL_DEFAULT) noexcept
259  : FieldUpdate(a_ctrl), op(a_op), pos(a_pos) {
260  }
262  FieldUpdate_LIST(const uint8_t** ptrp, size_t* remainp)
263  : FieldUpdate(ptrp, remainp),
265  ? OP(Serialization::decode_i8(ptrp, remainp))
266  : OP::REPLACE
267  ),
268  pos(has_pos()
269  ? Serialization::decode_vi24(ptrp, remainp)
270  : uint24_t(0)) {
271  }
273  bool has_pos() const noexcept {
274  return op == OP::INSERT ||
275  op == OP::OVERWRITE ||
276  op == OP::ERASE;
277  }
279  bool is_op_by_unique() const noexcept {
280  return op == OP::BY_UNIQUE;
281  }
283  bool is_op_by_cond() const noexcept {
284  return op == OP::BY_COND;
285  }
287  bool is_op_by_idx() const noexcept {
288  return op == OP::BY_INDEX;
289  }
291  bool is_op_require_data() const noexcept {
292  return is_op_by_idx() || is_op_by_cond();
293  }
295  bool has_item_op() const noexcept {
296  return is_op_by_idx() || is_op_by_unique() || is_op_by_cond();
297  }
298  template<bool is_upper_type=false>
300  void set_op(const char** ptr, uint32_t* remainp, int& err,
301  bool w_value_ctrl=false) noexcept {
302  if(!set_ctrl(ptr, remainp, w_value_ctrl))
303  return;
304  uint8_t len = 0;
305  if(*remainp >= 2) {
306  if(Condition::str_eq(*ptr, "+=", 2)) {
307  op = OP::APPEND;
308  len += 2;
309  } else if(Condition::str_eq(*ptr, "=+", 2)) {
310  op = OP::PREPEND;
311  len += 2;
312  } else if(Condition::str_eq(*ptr, "+:", 2)) {
313  op = OP::INSERT;
314  len += 2;
315  } else if(Condition::str_eq(*ptr, "=:", 2)) {
316  op = OP::OVERWRITE;
317  len += 2;
318  } else if(Condition::str_eq(*ptr, "-:", 2)) {
319  op = OP::ERASE;
320  len += 2;
321  } else if(is_upper_type && Condition::str_eq(*ptr, "U~", 2)) {
322  op = OP::BY_UNIQUE;
323  len += 2;
324  } else if(is_upper_type && Condition::str_eq(*ptr, "C~", 2)) {
325  op = OP::BY_COND;
326  len += 2;
327  } else if(is_upper_type && Condition::str_eq(*ptr, "?:", 2)) {
328  op = OP::BY_INDEX;
329  len += 2;
330  } else if(Condition::str_eq(*ptr, "==", 2)) {
331  op = OP::REPLACE;
332  len += 2;
333  }
334  }
335  if(!len) {
336  op = OP::REPLACE;
337  if(*remainp && **ptr == '=')
338  ++len;
339  }
340  *ptr += len;
341  *remainp -= len;
342  if(has_pos()) {
343  errno = 0;
344  char** end_at = const_cast<char**>(ptr);
345  int64_t v = std::strtoll(*ptr, end_at, 10);
346  if(errno) {
347  err = errno;
348  } else if (v > UINT24_MAX || v < INT24_MIN) {
349  err = ERANGE;
350  } else {
351  pos = v;
352  len = *end_at - *ptr;
353  *ptr += len;
354  *remainp -= len;
355  }
356  }
357  }
359  void apply(const StaticBuffer& infield, StaticBuffer& field) const {
360  switch(op) {
361  case OP::REPLACE: {
362  field.assign(infield.base, infield.size);
363  break;
364  }
365  case OP::APPEND: {
366  StaticBuffer value(field.size + infield.size);
367  memcpy(value.base, field.base, field.size);
368  memcpy(value.base + field.size, infield.base, infield.size);
369  field.set(value);
370  break;
371  }
372  case OP::PREPEND: {
373  StaticBuffer value(field.size + infield.size);
374  memcpy(value.base, infield.base, infield.size);
375  memcpy(value.base + infield.size, field.base, field.size);
376  field.set(value);
377  break;
378  }
379  case OP::INSERT: {
380  uint32_t p(pos > field.size ? uint32_t(field.size) : uint32_t(pos));
381  StaticBuffer value(field.size + infield.size);
382  memcpy(value.base, field.base, p);
383  memcpy(value.base +p, infield.base, infield.size);
384  memcpy(value.base +p + infield.size, field.base +p, field.size -p);
385  field.set(value);
386  break;
387  }
388  case OP::OVERWRITE: {
389  size_t sz;
390  uint32_t p;
391  if(pos >= field.size) {
392  p = field.size;
393  sz = field.size + infield.size;
394  } else {
395  p = pos;
396  sz = infield.size < field.size - p
397  ? field.size
398  : infield.size + p;
399  }
400  StaticBuffer value(sz);
401  memcpy(value.base, field.base, p);
402  memcpy(value.base +p, infield.base, infield.size);
403  uint32_t at = p + infield.size;
404  if(at < field.size)
405  memcpy(value.base + at, field.base + at, field.size - at);
406  field.set(value);
407  break;
408  }
409  case OP::ERASE: {
410  if(pos < field.size) {
411  uint32_t p = pos;
412  uint32_t remain = 0;
413  if(p + infield.size < field.size)
414  remain = field.size - (p + infield.size);
415  StaticBuffer value(p + remain);
416  memcpy(value.base, field.base, p);
417  memcpy(value.base + p, field.base + p + infield.size, remain);
418  field.set(value);
419  }
420  break;
421  }
422  default:
423  break;
424  }
425  }
427  void apply(const std::string& in_value, std::string& value) const {
428  StaticBuffer buf(
429  reinterpret_cast<uint8_t*>(value.data()),
430  value.size(),
431  false
432  );
433  apply(
434  StaticBuffer(
435  const_cast<uint8_t*>(
436  reinterpret_cast<const uint8_t*>(in_value.data())
437  ),
438  in_value.size(),
439  false
440  ),
441  buf
442  );
443  value.assign(reinterpret_cast<const char*>(buf.base), buf.size);
444  }
445  template<typename T>
447  void apply(const Field* infieldp, T& field) const {
448  apply(*reinterpret_cast<const T*>(infieldp), field);
449  }
450  template<typename T>
453  const T& p1, const T& p2) const noexcept {
455  comp,
456  reinterpret_cast<const uint8_t*>(p1.data()),
457  p1.size(),
458  reinterpret_cast<const uint8_t*>(p2.data()),
459  p2.size()
460  );
461  }
463  virtual uint24_t encoded_length() const noexcept override {
464  return FieldUpdate::encoded_length() +
467  }
469  virtual void encode(uint8_t** bufp) const override {
470  FieldUpdate::encode(bufp);
471  if(is_sub_op_required()) {
472  Serialization::encode_i8(bufp, uint8_t(op));
473  if(has_pos())
475  }
476  }
478  virtual void decode(const uint8_t** ptrp, size_t* remainp) override {
479  FieldUpdate::decode(ptrp, remainp);
480  if(is_sub_op_required()) {
481  op = OP(Serialization::decode_i8(ptrp, remainp));
482  if(has_pos())
483  pos = Serialization::decode_vi24(ptrp, remainp);;
484  }
485  }
486  virtual std::ostream& print(std::ostream& out) const override;
487 
490 };
491 
492 
493 template<typename UpdateField_T>
494 class FieldUpdate_Ext final : public UpdateField_T {
495  public:
496  template<typename... ArgsT>
498  FieldUpdate_Ext(uint32_t i, ArgsT&&... args) noexcept
499  : UpdateField_T(std::forward<ArgsT>(args)...),
500  data(i) {
501  }
503  FieldUpdate_Ext(bool w_data, const uint8_t** ptrp, size_t* remainp)
504  : UpdateField_T(ptrp, remainp),
505  data(w_data
506  ? Serialization::decode_vi32(ptrp, remainp)
507  : uint32_t(0)
508  ) {
509  }
510  FieldUpdate_Ext(FieldUpdate_Ext&&) noexcept = default;
511  FieldUpdate_Ext& operator=(FieldUpdate_Ext&&) noexcept = default;
513  FieldUpdate_Ext& operator=(const FieldUpdate_Ext&) = delete;
514  virtual ~FieldUpdate_Ext() noexcept { }
516  void set_data(uint32_t i) noexcept {
517  data = i;
518  }
520  uint32_t ext_encoded_length(bool w_data) const noexcept {
522  (w_data
524  : 0);
525  }
527  void ext_encode(bool w_data, uint8_t** bufp) const {
528  UpdateField_T::encode(bufp);
529  if(w_data)
531  }
533  void ext_decode(bool w_data, const uint8_t** ptrp, size_t* remainp) {
534  UpdateField_T::decode(ptrp, remainp);
535  if(w_data)
536  data = Serialization::decode_vi32(ptrp, remainp);
537  }
538  std::ostream& ext_print(bool w_data, std::ostream& out) const {
539  if(w_data)
540  out << " data=" << data;
541  return UpdateField_T::print(out << ' ');
542  }
543  uint32_t data;
544 };
545 
546 
547 //
548 template<typename UpdateField_T, typename ValueT>
550  : public FieldUpdate_LIST,
551  private Core::Vector<FieldUpdate_Ext<UpdateField_T>> {
554  mutable DataT* data;
555  public:
561  FieldUpdate_LIST_ITEMS(OP a_op=OP::REPLACE, uint24_t a_pos=0,
562  uint8_t a_ctrl=CTRL_DEFAULT) noexcept
563  : FieldUpdate_LIST(a_op, a_pos, a_ctrl),
564  data(nullptr) {
565  }
567  FieldUpdate_LIST_ITEMS(const uint8_t** ptrp, size_t* remainp)
568  : FieldUpdate_LIST(ptrp, remainp), data(nullptr) {
569  if(has_item_op()) {
570  uint24_t len = Serialization::decode_vi24(ptrp, remainp);
571  ItemsT::reserve(len);
572  bool w_data = is_op_require_data();
573  for(;len; --len)
574  ItemsT::emplace_back(w_data, ptrp, remainp);
575  }
576  }
577  virtual ~FieldUpdate_LIST_ITEMS() noexcept {
578  delete data;
579  }
580  template<typename... ArgsT>
582  UpdateField_T& add_item(uint32_t i, ArgsT&&... args) {
583  return ItemsT::emplace_back(i, std::forward<ArgsT>(args)...);
584  }
585  template<typename T>
587  void apply(const Field* infieldp, T& field) const {
588  auto infield(reinterpret_cast<const T*>(infieldp));
589  switch(op) {
590  case OP::REPLACE:
591  case OP::APPEND:
592  case OP::PREPEND: {
593  FieldUpdate_LIST::apply(infieldp, field);
594  break;
595  }
596  case OP::INSERT: {
597  if(!data)
598  infield->convert_to(*(data = new DataT()));
599  const DataT& vec_in = *data;
600  DataT vec;
601  field.convert_to(vec);
602  vec.insert(
603  pos > vec.size() ? vec.size() : uint32_t(pos),
604  vec_in.cbegin(),
605  vec_in.cend()
606  );
607  field.set_from(vec);
608  break;
609  }
610  case OP::OVERWRITE: {
611  if(!data)
612  infield->convert_to(*(data = new DataT()));
613  const DataT& vec_in = *data;
614  DataT vec;
615  field.convert_to(vec);
616  size_t sz;
617  uint32_t p;
618  if(pos >= vec.size()) {
619  p = vec.size();
620  sz = vec.size() + vec_in.size();
621  } else {
622  p = pos;
623  sz = vec_in.size() < vec.size() - p
624  ? vec.size()
625  : vec_in.size() + p;
626  }
627  DataT items;
628  items.reserve(sz);
629  for(uint32_t i = 0; i < p; ++i)
630  items.push_back(std::move(vec[i]));
631  for(auto it = vec_in.cbegin(); it < vec_in.cend(); ++it)
632  items.push_back(*it);
633  if(vec.size() > items.size()) {
634  for(auto it = vec.begin() + items.size(); it < vec.end(); ++it)
635  items.push_back(std::move(*it));
636  }
637  field.set_from(items);
638  break;
639  }
640  case OP::ERASE: {
641  if(field.size) {
642  if(!data)
643  infield->convert_to(*(data = new DataT()));
644  DataT vec;
645  auto has_count = field.convert_less_to(vec, pos, data->size());
646  if(has_count != vec.size())
647  field.set_from(vec);
648  }
649  break;
650  }
651  case OP::BY_UNIQUE: {
652  if(!data)
653  infield->convert_to(*(data = new DataT()));
654  const DataT& vec_in = *data;
655  std::set<ValueT> vec;
656  field.convert_to(vec);
657  auto itu = vec_in.cbegin();
658  for(auto iti = ItemsT::cbegin() ;iti < ItemsT::cend(); ++iti, ++itu) {
659  if(iti->is_value_set())
660  vec.insert(*itu);
661  else if(iti->is_value_del())
662  vec.erase(*itu);
663  }
664  field.set_from(vec);
665  break;
666  }
667  case OP::BY_COND: {
668  if(!data)
669  infield->convert_to(*(data = new DataT()));
670  const DataT& vec_in = *data;
671  DataT vec;
672  field.convert_to(vec);
673  auto itu = vec_in.cbegin();
674  for(auto iti = ItemsT::cbegin() ;iti < ItemsT::cend(); ++iti, ++itu) {
675  auto it = vec.cbegin();
676  auto comp(Condition::Comp(iti->data));
677  for(; it < vec.cend(); ++it) {
678  if(iti->is_matching(comp, *itu, *it))
679  break;
680  }
681  if(it == vec.cend()) {
682  if(iti->is_value_set())
683  vec.emplace_back(*itu);
684  } else if(iti->is_value_del()) {
685  vec.erase(it);
686  --iti;
687  --itu;
688  }
689  }
690  field.set_from(vec);
691  break;
692  }
693  case OP::BY_INDEX: {
694  if(!data)
695  infield->convert_to(*(data = new DataT()));
696  const DataT& vec_in = *data;
697  DataT vec;
698  field.convert_to(vec);
699  auto iti = ItemsT::cbegin();
700  auto itu = vec_in.cbegin();
701  for( ;iti < ItemsT::cend(); ++iti, ++itu) {
702  if(iti->data < vec.size())
703  iti->apply(*itu, vec[iti->data]);
704  else if(!iti->is_no_add_field())
705  iti->apply(*itu, vec.emplace_back());
706  }
707  field.set_from(vec);
708  break;
709  }
710  default:
711  break;
712  }
713  }
715  uint24_t encoded_length() const noexcept override {
717  if(has_item_op()) {
719  bool w_data = is_op_require_data();
720  for(auto& item : *this)
721  len += item.ext_encoded_length(w_data);
722  }
723  return len;
724  }
726  void encode(uint8_t** bufp) const override {
728  if(has_item_op()) {
730  bool w_data = is_op_require_data();
731  for(auto& item : *this)
732  item.ext_encode(w_data, bufp);
733  }
734  }
736  void decode(const uint8_t** ptrp, size_t* remainp) override {
737  FieldUpdate_LIST::decode(ptrp, remainp);
738  if(has_item_op()) {
739  uint24_t len = Serialization::decode_vi24(ptrp, remainp);
740  ItemsT::reserve(len);
741  bool w_data = is_op_require_data();
742  for(;len; --len)
743  ItemsT::emplace_back(w_data, ptrp, remainp);
744  }
745  }
746  virtual std::ostream& print(std::ostream& out) const override {
748  if(has_item_op()) {
749  out << " items=" << ItemsT::size() << '[';
750  bool w_data = is_op_require_data();
751  for(auto& item : *this)
752  item.ext_print(w_data, out) << ',';
753  out << ']';
754  }
755  return out;
756  }
757 
758 };
759 
760 typedef FieldUpdate_LIST_ITEMS<FieldUpdate_MATH, int64_t>
764 //
765 
766 
767 
768 }}}}}
769 
770 #ifdef SWC_IMPL_SOURCE
772 #endif
773 
774 #endif // swcdb_db_cells_CellValueSerialFieldUpdate_h
SWC::Core::Vector::erase
SWC_CAN_INLINE iterator erase(size_type offset) noexcept(_NoExceptMoveAssign &&_NoExceptDestructor)
Definition: Vector.h:464
SWC::DB::Cell::Serial::Value::FieldUpdate::FieldUpdate
SWC_CAN_INLINE FieldUpdate(uint8_t a_ctrl) noexcept
Definition: CellValueSerialFieldUpdate.h:37
SWC::DB::Cell::Serial::Value::FieldUpdate::is_value_set
SWC_CAN_INLINE bool is_value_set() const noexcept
Definition: CellValueSerialFieldUpdate.h:97
SWC::DB::Cell::Serial::Value::FieldUpdate::FieldUpdate
FieldUpdate(FieldUpdate &&) noexcept=default
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::operator=
FieldUpdate_LIST_ITEMS & operator=(const FieldUpdate_LIST_ITEMS &)=delete
SWC::Serialization::encode_vi24
constexpr SWC_CAN_INLINE void encode_vi24(uint8_t **bufp, uint24_t val)
Definition: Serialization.h:207
SWC::DB::Cell::Serial::Value::FieldUpdate::CTRL_DELETE_FIELD
static constexpr const uint8_t CTRL_DELETE_FIELD
Definition: CellValueSerialFieldUpdate.h:33
SWC::DB::Cell::Serial::Value::FieldUpdate
Definition: CellValueSerialFieldUpdate.h:29
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::ext_decode
SWC_CAN_INLINE void ext_decode(bool w_data, const uint8_t **ptrp, size_t *remainp)
Definition: CellValueSerialFieldUpdate.h:533
SWC::Condition::is_matching_extended
SWC_CAN_INLINE bool is_matching_extended(uint8_t comp, const uint8_t *p1, uint32_t p1_len, const uint8_t *p2, uint32_t p2_len)
Definition: Comparators.h:459
SWC::Serialization::encoded_length_vi24
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi24(uint24_t val) noexcept
Definition: Serialization.h:199
SWC::DB::Cell::Serial::Value::FieldUpdate::encoded_length
virtual SWC_CAN_INLINE uint24_t encoded_length() const noexcept
Definition: CellValueSerialFieldUpdate.h:113
SWC::DB::Cell::Serial::Value::FieldUpdate::set_delete_field
SWC_CAN_INLINE void set_delete_field() noexcept
Definition: CellValueSerialFieldUpdate.h:85
SWC::DB::Cell::Serial::Value::FieldUpdate::FieldUpdate
SWC_CAN_INLINE FieldUpdate(const uint8_t **ptrp, size_t *remainp)
Definition: CellValueSerialFieldUpdate.h:39
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::PLUS
@ PLUS
Definition: CellValueSerialFieldUpdate.h:135
SWC::Serialization::encoded_length_vi32
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi32(uint32_t val) noexcept
Definition: Serialization.h:234
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::data
uint32_t data
Definition: CellValueSerialFieldUpdate.h:543
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::decode
SWC_CAN_INLINE void decode(const uint8_t **ptrp, size_t *remainp) override
Definition: CellValueSerialFieldUpdate.h:232
SWC::UINT24_MAX
constexpr const uint24_t UINT24_MAX
Definition: BitFieldInt.h:403
SWC::DB::Cell::Serial::Value::FieldUpdate::set_value_del
SWC_CAN_INLINE void set_value_del() noexcept
Definition: CellValueSerialFieldUpdate.h:101
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::add_item
SWC_CAN_INLINE UpdateField_T & add_item(uint32_t i, ArgsT &&... args)
Definition: CellValueSerialFieldUpdate.h:582
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::op
OP op
Definition: CellValueSerialFieldUpdate.h:488
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH
Definition: CellValueSerialFieldUpdate.h:131
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::FieldUpdate_LIST_ITEMS
FieldUpdate_LIST_ITEMS(FieldUpdate_LIST_ITEMS &&)=delete
print
void print(std::ostream &out) const
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext
Definition: CellValueSerialFieldUpdate.h:494
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::apply
SWC_CAN_INLINE void apply(const Field *infieldp, T &field) const
Definition: CellValueSerialFieldUpdate.h:587
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::has_pos
SWC_CAN_INLINE bool has_pos() const noexcept
Definition: CellValueSerialFieldUpdate.h:273
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::ext_encode
SWC_CAN_INLINE void ext_encode(bool w_data, uint8_t **bufp) const
Definition: CellValueSerialFieldUpdate.h:527
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::decode
SWC_CAN_INLINE void decode(const uint8_t **ptrp, size_t *remainp) override
Definition: CellValueSerialFieldUpdate.h:736
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::FieldUpdate_LIST_ITEMS
SWC_CAN_INLINE FieldUpdate_LIST_ITEMS(const uint8_t **ptrp, size_t *remainp)
Definition: CellValueSerialFieldUpdate.h:567
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::apply
SWC_CAN_INLINE void apply(const T &in_value, T &value) const
Definition: CellValueSerialFieldUpdate.h:186
SWC::Serialization::encode_i8
constexpr SWC_CAN_INLINE void encode_i8(uint8_t **bufp, uint8_t val) noexcept
Definition: Serialization.h:85
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::apply
SWC_CAN_INLINE void apply(const StaticBuffer &infield, StaticBuffer &field) const
Definition: CellValueSerialFieldUpdate.h:359
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::set_data
SWC_CAN_INLINE void set_data(uint32_t i) noexcept
Definition: CellValueSerialFieldUpdate.h:516
SWC::DB::Cell::Serial::Value::FieldUpdate::set_ctrl
SWC_CAN_INLINE bool set_ctrl(const char **ptr, uint32_t *remainp, bool w_value_ctrl) noexcept
Definition: CellValueSerialFieldUpdate.h:48
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_op_by_idx
SWC_CAN_INLINE bool is_op_by_idx() const noexcept
Definition: CellValueSerialFieldUpdate.h:287
SWC::DB::Cell::Serial::Value::FieldUpdate::is_no_add_field
SWC_CAN_INLINE bool is_no_add_field() const noexcept
Definition: CellValueSerialFieldUpdate.h:81
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_INT64
FieldUpdate_LIST_ITEMS< FieldUpdate_MATH, int64_t > FieldUpdate_LIST_INT64
Definition: CellValueSerialFieldUpdate.h:761
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_op_require_data
SWC_CAN_INLINE bool is_op_require_data() const noexcept
Definition: CellValueSerialFieldUpdate.h:291
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::encode
SWC_CAN_INLINE void encode(uint8_t **bufp) const override
Definition: CellValueSerialFieldUpdate.h:726
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST
Definition: CellValueSerialFieldUpdate.h:243
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::OP
OP
Definition: CellValueSerialFieldUpdate.h:245
SWC::DB::Cell::Serial::Value::FieldUpdate::CTRL_VALUE_DEL
static constexpr const uint8_t CTRL_VALUE_DEL
Definition: CellValueSerialFieldUpdate.h:35
SWC::DB::Cell::Serial::Value::FieldUpdate::decode
virtual SWC_CAN_INLINE void decode(const uint8_t **ptrp, size_t *remainp)
Definition: CellValueSerialFieldUpdate.h:121
SWC::Condition::str_eq
bool str_eq(const char *s1, const char *s2) noexcept SWC_ATTRIBS((SWC_ATTRIB_O3))
Definition: Comparators_basic.h:237
SWC::DB::Cell::Serial::Value::FieldUpdate::CTRL_DEFAULT
static constexpr const uint8_t CTRL_DEFAULT
Definition: CellValueSerialFieldUpdate.h:31
decode
void decode(const uint8_t **bufp, size_t *remainp)
Definition: HeaderBufferInfo.h:33
SWC::DB::Cell::Serial::Value::FieldUpdate::is_delete_field
SWC_CAN_INLINE bool is_delete_field() const noexcept
Definition: CellValueSerialFieldUpdate.h:89
SWC::Condition::Comp
Comp
Definition: Comparators.h:27
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::MULTIPLY
@ MULTIPLY
Definition: CellValueSerialFieldUpdate.h:136
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_BYTES
FieldUpdate_LIST_ITEMS< FieldUpdate_LIST, std::string > FieldUpdate_LIST_BYTES
Definition: CellValueSerialFieldUpdate.h:763
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::pos
uint24_t pos
Definition: CellValueSerialFieldUpdate.h:489
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::DIVIDE
@ DIVIDE
Definition: CellValueSerialFieldUpdate.h:137
SWC::Core::Vector::end
constexpr SWC_CAN_INLINE iterator end() noexcept
Definition: Vector.h:227
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::ext_print
std::ostream & ext_print(bool w_data, std::ostream &out) const
Definition: CellValueSerialFieldUpdate.h:538
SWC::Core::Buffer::base
value_type * base
Definition: Buffer.h:131
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::DB::Cell::Serial::Value::FieldUpdate::set_value_set
SWC_CAN_INLINE void set_value_set() noexcept
Definition: CellValueSerialFieldUpdate.h:93
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::FieldUpdate_Ext
SWC_CAN_INLINE FieldUpdate_Ext(bool w_data, const uint8_t **ptrp, size_t *remainp)
Definition: CellValueSerialFieldUpdate.h:503
SWC::Serialization::decode_vi24
constexpr SWC_CAN_INLINE uint24_t decode_vi24(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:217
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::print
virtual std::ostream & print(std::ostream &out) const override
Definition: CellValueSerialFieldUpdate.cc:43
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::FieldUpdate_LIST_ITEMS
SWC_CAN_INLINE FieldUpdate_LIST_ITEMS(OP a_op=OP::REPLACE, uint24_t a_pos=0, uint8_t a_ctrl=CTRL_DEFAULT) noexcept
Definition: CellValueSerialFieldUpdate.h:561
SWC::Core::Buffer
Definition: Buffer.h:18
SWC::DB::Cell::Serial::Value::FieldUpdate::encode
virtual SWC_CAN_INLINE void encode(uint8_t **bufp) const
Definition: CellValueSerialFieldUpdate.h:117
SWC::Core::Buffer::size
size_t size
Definition: Buffer.h:130
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::FieldUpdate_MATH
SWC_CAN_INLINE FieldUpdate_MATH(OP a_op=OP::EQUAL, uint8_t a_ctrl=CTRL_DEFAULT) noexcept
Definition: CellValueSerialFieldUpdate.h:140
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::has_item_op
SWC_CAN_INLINE bool has_item_op() const noexcept
Definition: CellValueSerialFieldUpdate.h:295
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_matching
SWC_CAN_INLINE bool is_matching(Condition::Comp comp, const T &p1, const T &p2) const noexcept
Definition: CellValueSerialFieldUpdate.h:452
SWC::DB::Cells::INSERT
@ INSERT
Definition: Cell.h:62
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::print
virtual std::ostream & print(std::ostream &out) const override
Definition: CellValueSerialFieldUpdate.h:746
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::encoded_length
virtual SWC_CAN_INLINE uint24_t encoded_length() const noexcept override
Definition: CellValueSerialFieldUpdate.h:463
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::is_matching
SWC_CAN_INLINE bool is_matching(Condition::Comp comp, const T &p1, const T &p2) const noexcept
Definition: CellValueSerialFieldUpdate.h:217
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::encoded_length
SWC_CAN_INLINE uint24_t encoded_length() const noexcept override
Definition: CellValueSerialFieldUpdate.h:715
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::FieldUpdate_MATH
SWC_CAN_INLINE FieldUpdate_MATH(const uint8_t **ptrp, size_t *remainp)
Definition: CellValueSerialFieldUpdate.h:144
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::FieldUpdate_Ext
FieldUpdate_Ext(FieldUpdate_Ext &&) noexcept=default
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::operator=
FieldUpdate_LIST_ITEMS & operator=(FieldUpdate_LIST_ITEMS &&)=delete
SWC::Condition::is_matching
SWC_CAN_INLINE bool is_matching(bool volumetric, uint8_t comp, const uint8_t *p1, uint32_t p1_len, const uint8_t *p2, uint32_t p2_len)
Definition: Comparators.h:439
encoded_length
uint8_t encoded_length() noexcept
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::data
DataT * data
Definition: CellValueSerialFieldUpdate.h:554
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::APPEND
@ APPEND
Definition: CellValueSerialFieldUpdate.h:247
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::apply
SWC_CAN_INLINE void apply(const Field *infieldp, T &field) const
Definition: CellValueSerialFieldUpdate.h:447
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::ERASE
@ ERASE
Definition: CellValueSerialFieldUpdate.h:251
SWC::Core::Vector
Definition: Vector.h:14
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::FieldUpdate_LIST_ITEMS
FieldUpdate_LIST_ITEMS(const FieldUpdate_LIST_ITEMS &)=delete
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::BY_UNIQUE
@ BY_UNIQUE
Definition: CellValueSerialFieldUpdate.h:252
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::REPLACE
@ REPLACE
Definition: CellValueSerialFieldUpdate.h:246
SWC::Core::Vector< FieldUpdate_Ext< UpdateField_T > >::reserve
SWC_CAN_INLINE void reserve()
Definition: Vector.h:294
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::~FieldUpdate_LIST_ITEMS
virtual ~FieldUpdate_LIST_ITEMS() noexcept
Definition: CellValueSerialFieldUpdate.h:577
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_op_by_unique
SWC_CAN_INLINE bool is_op_by_unique() const noexcept
Definition: CellValueSerialFieldUpdate.h:279
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::apply
SWC_CAN_INLINE void apply(const Field *infieldp, T &field) const
Definition: CellValueSerialFieldUpdate.h:212
SWC::DB::Cell::Serial::Value::FieldUpdate::CTRL_VALUE_SET
static constexpr const uint8_t CTRL_VALUE_SET
Definition: CellValueSerialFieldUpdate.h:34
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_op_by_cond
SWC_CAN_INLINE bool is_op_by_cond() const noexcept
Definition: CellValueSerialFieldUpdate.h:283
SWC::uint24_t
Core::uint24_t uint24_t
Definition: BitFieldInt.h:401
SWC::StaticBuffer
Core::StaticBuffer StaticBuffer
Definition: Buffer.h:340
SWC::Config::T
const uint64_t T
Definition: Property.h:27
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::OVERWRITE
@ OVERWRITE
Definition: CellValueSerialFieldUpdate.h:250
CellValueSerialFieldUpdate.cc
SWC::DB::Cell::Serial::Value::Field
Definition: CellValueSerialField.h:70
SWC::DB::Cell::Serial::Value::FieldUpdate::set_no_add_field
SWC_CAN_INLINE void set_no_add_field() noexcept
Definition: CellValueSerialFieldUpdate.h:77
SWC::Core::Vector::cend
constexpr SWC_CAN_INLINE const_iterator cend() const noexcept
Definition: Vector.h:232
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::set_op
SWC_CAN_INLINE void set_op(const char **ptr, uint32_t *remainp, bool w_value_ctrl=false) noexcept
Definition: CellValueSerialFieldUpdate.h:156
SWC::DB::Cell::Serial::Value::FieldUpdate::CTRL_NO_ADD_FIELD
static constexpr const uint8_t CTRL_NO_ADD_FIELD
Definition: CellValueSerialFieldUpdate.h:32
SWC::Serialization::encode_vi32
constexpr SWC_CAN_INLINE void encode_vi32(uint8_t **bufp, uint32_t val)
Definition: Serialization.h:243
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::encode
SWC_CAN_INLINE void encode(uint8_t **bufp) const override
Definition: CellValueSerialFieldUpdate.h:226
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::FieldUpdate_Ext
SWC_CAN_INLINE FieldUpdate_Ext(uint32_t i, ArgsT &&... args) noexcept
Definition: CellValueSerialFieldUpdate.h:498
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::FieldUpdate_LIST
SWC_CAN_INLINE FieldUpdate_LIST(const uint8_t **ptrp, size_t *remainp)
Definition: CellValueSerialFieldUpdate.h:262
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::EQUAL
@ EQUAL
Definition: CellValueSerialFieldUpdate.h:134
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::FieldUpdate_LIST
SWC_CAN_INLINE FieldUpdate_LIST(OP a_op=OP::REPLACE, uint24_t a_pos=0, uint8_t a_ctrl=CTRL_DEFAULT) noexcept
Definition: CellValueSerialFieldUpdate.h:257
SWC::INT24_MIN
constexpr const int24_t INT24_MIN
Definition: BitFieldInt.h:406
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::INSERT
@ INSERT
Definition: CellValueSerialFieldUpdate.h:249
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS
Definition: CellValueSerialFieldUpdate.h:551
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::BY_INDEX
@ BY_INDEX
Definition: CellValueSerialFieldUpdate.h:254
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::OP
OP
Definition: CellValueSerialFieldUpdate.h:133
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::DataT
Core::Vector< ValueT > DataT
Definition: CellValueSerialFieldUpdate.h:553
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::FieldUpdate_MATH
FieldUpdate_MATH(FieldUpdate_MATH &&) noexcept=default
SWC::DB::Cell::Serial::Value::FieldUpdate::print
virtual std::ostream & print(std::ostream &out) const
Definition: CellValueSerialFieldUpdate.cc:15
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::set_op
SWC_CAN_INLINE void set_op(const char **ptr, uint32_t *remainp, int &err, bool w_value_ctrl=false) noexcept
Definition: CellValueSerialFieldUpdate.h:300
SWC::DB::Cell::Serial::Value::FieldUpdate::is_sub_op_required
SWC_CAN_INLINE bool is_sub_op_required() const noexcept
Definition: CellValueSerialFieldUpdate.h:109
SWC::DB::Cell::Serial::Value::FieldUpdate_Ext::ext_encoded_length
SWC_CAN_INLINE uint32_t ext_encoded_length(bool w_data) const noexcept
Definition: CellValueSerialFieldUpdate.h:520
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::apply
SWC_CAN_INLINE void apply(const std::string &in_value, std::string &value) const
Definition: CellValueSerialFieldUpdate.h:427
SWC::Core::Vector::push_back
SWC_CAN_INLINE void push_back(ArgsT &&... args)
Definition: Vector.h:331
SWC::DB::Cell::Serial::Value::FieldUpdate::ctrl
uint8_t ctrl
Definition: CellValueSerialFieldUpdate.h:126
SWC::Core::Vector::cbegin
constexpr SWC_CAN_INLINE const_iterator cbegin() const noexcept
Definition: Vector.h:216
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::encoded_length
SWC_CAN_INLINE uint24_t encoded_length() const noexcept override
Definition: CellValueSerialFieldUpdate.h:222
encode
void encode(uint8_t **bufp) const
Definition: HeaderBufferInfo.h:24
SWC::Serialization::decode_i8
constexpr SWC_CAN_INLINE uint8_t decode_i8(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:91
SWC::Core::Vector::size
constexpr SWC_CAN_INLINE size_type size() const noexcept
Definition: Vector.h:189
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::PREPEND
@ PREPEND
Definition: CellValueSerialFieldUpdate.h:248
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::print
virtual std::ostream & print(std::ostream &out) const override
Definition: CellValueSerialFieldUpdate.cc:27
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::decode
virtual SWC_CAN_INLINE void decode(const uint8_t **ptrp, size_t *remainp) override
Definition: CellValueSerialFieldUpdate.h:478
SWC::Core::Vector< FieldUpdate_Ext< UpdateField_T > >::emplace_back
SWC_CAN_INLINE reference emplace_back(ArgsT &&... args)
Definition: Vector.h:349
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::BY_COND
@ BY_COND
Definition: CellValueSerialFieldUpdate.h:253
SWC::Core::Vector::insert
SWC_CAN_INLINE iterator insert(size_type offset, ArgsT &&... args)
Definition: Vector.h:367
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::op
OP op
Definition: CellValueSerialFieldUpdate.h:239
SWC::Core::Vector::reserve
SWC_CAN_INLINE void reserve(size_type cap)
Definition: Vector.h:288
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::encode
virtual SWC_CAN_INLINE void encode(uint8_t **bufp) const override
Definition: CellValueSerialFieldUpdate.h:469
SWC::Serialization::decode_vi32
constexpr SWC_CAN_INLINE uint32_t decode_vi32(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:254
CellValueSerialField.h
SWC::DB::Cell::Serial::Value::FieldUpdate::is_value_del
SWC_CAN_INLINE bool is_value_del() const noexcept
Definition: CellValueSerialFieldUpdate.h:105
SWC::Core::Vector::begin
constexpr SWC_CAN_INLINE iterator begin() noexcept
Definition: Vector.h:211
SWC::Core::Buffer::assign
SWC_CAN_INLINE void assign(const value_type *data, size_t len)
Definition: Buffer.h:103
SWC::Core::Buffer::set
void set(value_type *data, size_t len, bool take_ownership) noexcept
Definition: Buffer.h:109