SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
VectorsVector.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_VectorsVector_h
7 #define swcdb_core_VectorsVector_h
8 
9 #include "swcdb/core/Exception.h"
10 
11 
12 namespace SWC { namespace Core {
13 
14 
15 
16 template<typename VectorsT, typename VectorT,
17  typename VectorT::size_type SIZE,
18  typename VectorT::size_type GROW = SIZE/4,
19  typename VectorT::size_type SPLIT = SIZE/2>
20 class VectorsVector : public VectorsT {
21 
22  public:
23 
24  using value_type = typename VectorT::value_type;
25 
26  constexpr SWC_CAN_INLINE
27  VectorsVector() noexcept { }
28 
31  : VectorsT(other) {
32  }
33 
34  constexpr SWC_CAN_INLINE
35  VectorsVector(VectorsVector&& other) noexcept
36  : VectorsT(std::move(other)) {
37  }
38 
39  ~VectorsVector() noexcept { }
40 
43  VectorsT::operator=(other);
44  return *this;
45  }
46 
48  VectorsVector& operator=(VectorsVector&& other) noexcept {
49  VectorsT::operator=(std::move(other));
50  return *this;
51  }
52 
53  constexpr SWC_CAN_INLINE
54  bool operator==(const VectorsVector& other) const noexcept {
55  return VectorsT::operator==(other);
56  }
57 
58  constexpr SWC_CAN_INLINE
59  bool operator!=(const VectorsVector& other) const noexcept {
60  return !(*this == other);
61  }
62 
63 
64  constexpr SWC_CAN_INLINE
65  static size_t need_reserve(VectorT& vec) {
66  if(GROW > 1 && vec.capacity() == vec.size() && vec.capacity() >= GROW) {
67  size_t sz = vec.size() + GROW;
68  if((sz > SIZE ? (sz = SIZE) : sz) > vec.capacity())
69  return sz;
70  }
71  return 0;
72  }
73 
74 
75 
76  /* Position by vector index
77  class ConstIterator final {
78  const VectorsT& _vectors;
79  typename VectorsT::size_type _pos_vec;
80  typename VectorT::size_type _pos_item;
81  public:
82 
83  constexpr SWC_CAN_INLINE
84  ConstIterator(const VectorsT& a_vectors) noexcept
85  : _vectors(a_vectors), _pos_vec(0), _pos_item(0) {
86  }
87 
88  constexpr SWC_CAN_INLINE
89  ConstIterator(const VectorsT& a_vectors, size_t offset) noexcept
90  : _vectors(a_vectors), _pos_vec(0) {
91  for(; _pos_vec < _vectors.size(); ++_pos_vec) {
92  if(!offset || offset < _vectors[_pos_vec].size()) {
93  _pos_item = offset;
94  break;
95  }
96  offset -= _vectors[_pos_vec].size();
97  }
98  }
99 
100  constexpr SWC_CAN_INLINE
101  ConstIterator(const ConstIterator& other) noexcept
102  : _vectors(other._vectors),
103  _pos_vec(other._pos_vec), _pos_item(other._pos_item) {
104  }
105 
106  constexpr SWC_CAN_INLINE
107  ConstIterator& operator=(const ConstIterator& other) noexcept {
108  _pos_vec = other._pos_vec;
109  _pos_item = other._pos_item;
110  return *this;
111  }
112 
113  constexpr SWC_CAN_INLINE
114  ConstIterator& at(size_t offset) noexcept {
115  for(_pos_vec = 0; _pos_vec < _vectors.size(); ++_pos_vec) {
116  if(!offset || offset < _vectors[_pos_vec].size()) {
117  _pos_item = offset;
118  break;
119  }
120  offset -= _vectors[_pos_vec].size();
121  }
122  return *this;
123  }
124 
125  constexpr SWC_CAN_INLINE
126  operator bool() const noexcept {
127  return _pos_vec != _vectors.size() &&
128  _pos_item != _vectors[_pos_vec].size();
129  }
130 
131  constexpr SWC_CAN_INLINE
132  ConstIterator& operator++() noexcept {
133  if(++_pos_item == _vectors[_pos_vec].size() &&
134  ++_pos_vec != _vectors.size())
135  _pos_item = 0;
136  return *this;
137  }
138 
139  constexpr SWC_CAN_INLINE
140  const value_type& item() const noexcept {
141  return _vectors[_pos_vec][_pos_item];
142  }
143 
144  };
145 
146 
147  class Iterator final {
148  VectorsT& _vectors;
149  typename VectorsT::size_type _pos_vec;
150  typename VectorT::size_type _pos_item;
151  public:
152 
153  constexpr SWC_CAN_INLINE
154  Iterator(VectorsT& a_vectors) noexcept
155  : _vectors(a_vectors), _pos_vec(0), _pos_item(0) {
156  }
157 
158  constexpr SWC_CAN_INLINE
159  Iterator(VectorsT& a_vectors, size_t offset) noexcept
160  : _vectors(a_vectors), _pos_vec(0) {
161  for(; _pos_vec < _vectors.size(); ++_pos_vec) {
162  if(!offset || offset < _vectors[_pos_vec].size()) {
163  _pos_item = offset;
164  break;
165  }
166  offset -= _vectors[_pos_vec].size();
167  }
168  }
169 
170  constexpr SWC_CAN_INLINE
171  Iterator(const Iterator& other) noexcept
172  : _vectors(other._vectors),
173  _pos_vec(other._pos_vec), _pos_item(other._pos_item) {
174  }
175 
176  constexpr SWC_CAN_INLINE
177  Iterator& operator=(const Iterator& other) noexcept {
178  _pos_vec = other._pos_vec;
179  _pos_item = other._pos_item;
180  return *this;
181  }
182 
183  constexpr SWC_CAN_INLINE
184  Iterator& at(size_t offset) noexcept {
185  for(_pos_vec = 0; _pos_vec < _vectors.size(); ++_pos_vec) {
186  if(!offset || offset < _vectors[_pos_vec].size()) {
187  _pos_item = offset;
188  break;
189  }
190  offset -= _vectors[_pos_vec].size();
191  }
192  return *this;
193  }
194 
195  constexpr SWC_CAN_INLINE
196  operator bool() const noexcept {
197  return _pos_vec != _vectors.size() &&
198  _pos_item != _vectors[_pos_vec].size();
199  }
200 
201  constexpr SWC_CAN_INLINE
202  Iterator& operator++() noexcept {
203  if(++_pos_item == _vectors[_pos_vec].size() &&
204  ++_pos_vec != _vectors.size())
205  _pos_item = 0;
206  return *this;
207  }
208 
209  constexpr SWC_CAN_INLINE
210  value_type& item() noexcept {
211  return _vectors[_pos_vec][_pos_item];
212  }
213 
214  SWC_CAN_INLINE
215  void insert(const value_type& value) {
216  ensure();
217  _vectors[_pos_vec].insert(
218  _vectors[_pos_vec].cbegin() + _pos_item, value);
219  //_vectors[_pos_vec].insert(_pos_item, value);
220  }
221 
222  SWC_CAN_INLINE
223  void insert(value_type&& value) {
224  ensure();
225  _vectors[_pos_vec].insert(
226  _vectors[_pos_vec].cbegin() + _pos_item, std::move(value));
227  //_vectors[_pos_vec].insert(_pos_item, std::move(value));
228  }
229 
230  SWC_CAN_INLINE
231  void ensure() {
232  if(_vectors[_pos_vec].size() >= SIZE) {
233  auto n_vector = _vectors.insert(
234  _vectors.cbegin() + _pos_vec + 1, VectorT());
235  //auto n_vector = _vectors.insert(_pos_vec + 1, VectorT());
236  n_vector->reserve(SPLIT + 1);
237  auto it_b = _vectors[_pos_vec].cbegin() + SPLIT;
238  n_vector->assign (it_b, _vectors[_pos_vec].cend());
239  _vectors[_pos_vec].erase (it_b, _vectors[_pos_vec].cend());
240  if(_pos_item >= SPLIT) {
241  ++_pos_vec;
242  _pos_item -= SPLIT;
243  }
244 
245  } else if(size_t sz = need_reserve(_vectors[_pos_vec])) {
246  _vectors[_pos_vec].reserve(sz);
247  }
248  }
249 
250  SWC_CAN_INLINE
251  void remove() noexcept {
252  _vectors[_pos_vec].erase(_vectors[_pos_vec].cbegin() + _pos_item);
253  //_vectors[_pos_vec].erase(_pos_item);
254  if(_vectors[_pos_vec].empty() && _vectors.size() > 1) {
255  _vectors.erase(_vectors.cbegin() + _pos_vec);
256  //_vectors.erase(_pos_vec);
257  if(_pos_vec != _vectors.size())
258  _pos_item = 0;
259  } else if(_pos_item == _vectors[_pos_vec].size() &&
260  ++_pos_vec != _vectors.size()) {
261  _pos_item = 0;
262  }
263  }
264 
265  SWC_CAN_INLINE
266  void remove(size_t number) noexcept {
267  while(number) {
268  if(_pos_item == 0 && number >= _vectors[_pos_vec].size()) {
269  if(_vectors.size() == 1) {
270  _vectors[_pos_vec].clear();
271  _pos_item = 0;
272  return;
273  }
274  number -= _vectors[_pos_vec].size();
275  _vectors.erase(_vectors.cbegin() + _pos_vec);
276  //_vectors.erase(_pos_vec);
277 
278  } else {
279  size_t avail = _vectors[_pos_vec].size() - _pos_item;
280  if(avail > number) {
281  _vectors[_pos_vec].erase(
282  _vectors[_pos_vec].cbegin() + _pos_item,
283  _vectors[_pos_vec].cbegin() + _pos_item + number);
284  return;
285  }
286  number -= avail;
287  _vectors[_pos_vec].erase(
288  _vectors[_pos_vec].cbegin() + _pos_item,
289  _vectors[_pos_vec].cend());
290  ++_pos_vec;
291  }
292 
293  if(_pos_vec == _vectors.size())
294  return;
295  _pos_item = 0;
296  }
297  }
298 
299  };
300  */
301 
302 
303 
304  /* Position by vector iterator */
305  class ConstIterator final {
306  const VectorsT& _vectors;
307  typename VectorsT::const_iterator _vector;
308  typename VectorT::const_iterator _item;
309  public:
310 
311  constexpr SWC_CAN_INLINE
312  explicit ConstIterator(const VectorsT& a_vectors) noexcept
313  : _vectors(a_vectors), _vector(_vectors.cbegin()),
314  _item(_vector == _vectors.cend()
315  ? typename VectorT::const_iterator() : _vector->cbegin()) {
316  }
317 
318  constexpr SWC_CAN_INLINE
319  explicit ConstIterator(const VectorsT& a_vectors, size_t offset) noexcept
320  : _vectors(a_vectors), _vector(_vectors.cbegin()), _item() {
321  for(auto vec_end = _vectors.cend(); _vector != vec_end; ++_vector) {
322  if(!offset || offset < _vector->size()) {
323  _item = _vector->cbegin() + offset;
324  break;
325  }
326  offset -= _vector->size();
327  }
328  }
329 
330  constexpr SWC_CAN_INLINE
331  ConstIterator(const ConstIterator& other) noexcept
332  : _vectors(other._vectors), _vector(other._vector),
333  _item(other._item) {
334  }
335 
336  constexpr SWC_CAN_INLINE
337  ConstIterator& operator=(const ConstIterator& other) noexcept {
338  _vector = other._vector;
339  _item = other._item;
340  return *this;
341  }
342 
343  constexpr SWC_CAN_INLINE
344  ConstIterator& at(size_t offset) noexcept {
345  _vector = _vectors.cbegin();
346  for(auto vec_end = _vectors.cend(); _vector != vec_end; ++_vector) {
347  if(!offset || offset < _vector->size()) {
348  _item = _vector->cbegin() + offset;
349  break;
350  }
351  offset -= _vector->size();
352  }
353  return *this;
354  }
355 
356  constexpr SWC_CAN_INLINE
357  operator bool() const noexcept {
358  return _vector != _vectors.cend() && _item != _vector->cend();
359  }
360 
361  constexpr SWC_CAN_INLINE
362  ConstIterator& operator++() noexcept {
363  if(++_item == _vector->cend() && ++_vector != _vectors.cend())
364  _item = _vector->cbegin();
365  return *this;
366  }
367 
368  constexpr SWC_CAN_INLINE
369  bool next() noexcept {
370  return ++_item != _vector->cend() ||
371  (++_vector != _vectors.cend() &&
372  (_item = _vector->cbegin()) != _vector->cend());
373  }
374 
375  constexpr SWC_CAN_INLINE
376  bool operator==(const ConstIterator& other) const noexcept {
377  return _vector == other._vector && _item == other._item;
378  }
379 
380  constexpr SWC_CAN_INLINE
381  const value_type& item() const noexcept {
382  return *_item;
383  }
384 
385  };
386 
387 
388  class Iterator final {
389  VectorsT& _vectors;
390  typename VectorsT::iterator _vector;
391  typename VectorT::iterator _item;
392  public:
393 
394  constexpr SWC_CAN_INLINE
395  explicit Iterator(VectorsT& a_vectors) noexcept
396  : _vectors(a_vectors), _vector(_vectors.begin()),
397  _item(_vector == _vectors.cend()
398  ? typename VectorT::iterator() : _vector->begin()) {
399  }
400 
401  constexpr SWC_CAN_INLINE
402  explicit Iterator(VectorsT& a_vectors, size_t offset) noexcept
403  : _vectors(a_vectors), _vector(_vectors.begin()), _item() {
404  for(auto vec_end = _vectors.cend(); _vector != vec_end; ++_vector) {
405  if(!offset || offset < _vector->size()) {
406  _item = _vector->begin() + offset;
407  break;
408  }
409  offset -= _vector->size();
410  }
411  }
412 
413  constexpr SWC_CAN_INLINE
414  Iterator(const Iterator& other) noexcept
415  : _vectors(other._vectors), _vector(other._vector),
416  _item(other._item) {
417  }
418 
419  constexpr SWC_CAN_INLINE
420  Iterator& operator=(const Iterator& other) noexcept {
421  _vector = other._vector;
422  _item = other._item;
423  return *this;
424  }
425 
426  constexpr SWC_CAN_INLINE
427  Iterator& at(size_t offset) noexcept {
428  _vector = _vectors.begin();
429  for(auto vec_end = _vectors.cend(); _vector != vec_end; ++_vector) {
430  if(!offset || offset < _vector->size()) {
431  _item = _vector->begin() + offset;
432  break;
433  }
434  offset -= _vector->size();
435  }
436  return *this;
437  }
438 
439  constexpr SWC_CAN_INLINE
440  operator bool() const noexcept {
441  return _vector != _vectors.cend() && _item != _vector->cend();
442  }
443 
444  constexpr SWC_CAN_INLINE
445  Iterator& operator++() noexcept {
446  if(++_item == _vector->cend() && ++_vector != _vectors.cend())
447  _item = _vector->begin();
448  return *this;
449  }
450 
451  constexpr SWC_CAN_INLINE
452  bool next() noexcept {
453  return ++_item != _vector->cend() ||
454  (++_vector != _vectors.cend() &&
455  (_item = _vector->begin()) != _vector->cend());
456  }
457 
458  constexpr SWC_CAN_INLINE
459  bool operator==(const Iterator& other) const noexcept {
460  return _vector == other._vector && _item == other._item;
461  }
462 
463  constexpr SWC_CAN_INLINE
464  value_type& item() noexcept {
465  return *_item;
466  }
467 
469  void insert(const value_type& value) {
470  ensure();
471  _item = _vector->insert(_item, value);
472  }
473 
475  void insert(value_type&& value) {
476  ensure();
477  _item = _vector->insert(_item, std::move(value));
478  }
479 
481  void ensure() {
482  if(_vector->size() >= SIZE) {
483  auto it_b = _vector->cbegin() + SPLIT;
484  auto n_vector = _vectors.insert(++_vector, VectorT());
485  n_vector->reserve(SPLIT + 1);
486  _vector = n_vector - 1;
487  n_vector->assign(it_b, _vector->cend());
488  _vector->erase (it_b, _vector->cend());
489  size_t offset = _item - _vector->cbegin();
490  if(offset >= SPLIT)
491  _item = (++_vector)->begin() + (offset - SPLIT);
492 
493  } else if(size_t sz = need_reserve(*_vector)) {
494  size_t offset = _item - _vector->cbegin();
495  _vector->reserve(sz);
496  _item = _vector->begin() + offset;
497  }
498  }
499 
501  void remove() noexcept {
502  _item = _vector->erase(_item);
503  if(_vector->empty() && _vectors.size() > 1) {
504  if((_vector = _vectors.erase(_vector)) != _vectors.cend())
505  _item = _vector->begin();
506  } else if(_item == _vector->cend() && ++_vector != _vectors.cend()) {
507  _item = _vector->begin();
508  }
509  }
510 
512  void remove(size_t number) noexcept {
513  while(number) {
514  if(_item == _vector->begin() && number >= _vector->size()) {
515  if(_vectors.size() == 1) {
516  _vector->clear();
517  _item = _vector->end();
518  return;
519  }
520  number -= _vector->size();
521  _vector = _vectors.erase(_vector);
522 
523  } else {
524  size_t avail = _vector->cend() - _item;
525  if(avail > number) {
526  _item = _vector->erase(_item, _item + number);
527  return;
528  }
529  number -= avail;
530  _vector->erase(_item, _vector->cend());
531  ++_vector;
532  }
533 
534  if(_vector == _vectors.cend())
535  return;
536  _item = _vector->begin();
537  }
538  }
539 
540  };
541 
542 
543 
544 
545  template<typename T>
546  constexpr SWC_CAN_INLINE
547  T get() noexcept {
548  return T(*this);
549  }
550 
551  template<typename T>
552  constexpr SWC_CAN_INLINE
553  T get() const noexcept {
554  return T(*this);
555  }
556 
557  template<typename T>
558  constexpr SWC_CAN_INLINE
559  T get(size_t offset) noexcept {
560  return T(*this, offset);
561  }
562 
563  template<typename T>
564  constexpr SWC_CAN_INLINE
565  T get(size_t offset) const noexcept {
566  return T(*this, offset);
567  }
568 
569 
570  constexpr SWC_CAN_INLINE
571  Iterator GetIterator() noexcept {
572  return get<Iterator>();
573  }
574 
575  constexpr SWC_CAN_INLINE
576  Iterator GetIterator(size_t offset) noexcept {
577  return get<Iterator>(offset);
578  }
579 
580  constexpr SWC_CAN_INLINE
581  ConstIterator GetConstIterator() const noexcept {
582  return get<ConstIterator>();
583  }
584 
585  constexpr SWC_CAN_INLINE
586  ConstIterator GetConstIterator(size_t offset) const noexcept {
587  return get<ConstIterator>(offset);
588  }
589 
590 
591  constexpr SWC_CAN_INLINE
592  size_t size_of_internal() const noexcept {
593  size_t sz = VectorsT::capacity() * sizeof(VectorT);
594  for(auto& vec : *this)
595  sz += vec.capacity() * sizeof(value_type);
596  return sz;
597  }
598 
599  constexpr SWC_CAN_INLINE
600  size_t count() const noexcept {
601  size_t sz = 0;
602  for(auto& vec : *this)
603  sz += vec.size();
604  return sz;
605  }
606 
607 
608  constexpr SWC_CAN_INLINE
609  value_type& front() noexcept {
610  return VectorsT::front().front();
611  }
612 
613  constexpr SWC_CAN_INLINE
614  value_type& back() noexcept {
615  return VectorsT::back().back();
616  }
617 
618  constexpr SWC_CAN_INLINE
619  const value_type& front() const noexcept {
620  return VectorsT::front().front();
621  }
622 
623  constexpr SWC_CAN_INLINE
624  const value_type& back() const noexcept {
625  return VectorsT::back().back();
626  }
627 
628  constexpr SWC_CAN_INLINE
629  value_type* operator[](size_t pos) noexcept {
630  auto it = get<Iterator>(pos);
631  return it ? &it.item() : nullptr;
632  }
633 
634 
636  void ensure() {
637  if(VectorsT::empty() || VectorsT::back().size() >= SIZE) {
638  VectorsT::emplace_back();
639  } else if(size_t sz = need_reserve(VectorsT::back())) {
640  VectorsT::back().reserve(sz);
641  }
642  }
643 
644 
646  void push_back(const value_type& value) {
647  ensure();
648  VectorsT::back().push_back(value);
649  }
650 
652  void push_back(value_type&& value) {
653  ensure();
654  VectorsT::back().push_back(std::move(value));
655  }
656 
657 
659  void add(VectorsVector&& other) {
660  VectorsT::reserve(VectorsT::size() + other.size());
661  for(auto it = other.begin(); it != other.cend(); ++it)
662  VectorsT::emplace_back(std::move(*it));
663  other.clear();
664  other.shrink_to_fit();
665  }
666 
667 
669  void split(size_t split_at, VectorsVector& to) {
670  to.reserve(to.size() + split_at);
671  for(auto it = VectorsT::begin() + split_at; it != VectorsT::cend(); ++it)
672  to.emplace_back(std::move(*it));
673  VectorsT::erase(VectorsT::cbegin() + split_at, VectorsT::cend());
674  }
675 
676  void print(std::ostream& out) const {
677  out << "VectorsVector(" << VectorsT::size() << '/' << VectorsT::capacity()
678  << " vectors=[";
679  for(auto& vec : *this)
680  out << vec.size() << '/' << vec.capacity() << ',';
681  out << "])";
682  }
683 
684 
685 };
686 
687 
688 }} // namespace SWC::Core
689 
690 
691 
692 #endif // swcdb_core_VectorsVector_h
SWC::Core::VectorsVector::Iterator::ensure
SWC_CAN_INLINE void ensure()
Definition: VectorsVector.h:481
SWC::Core::VectorsVector::need_reserve
constexpr static SWC_CAN_INLINE size_t need_reserve(VectorT &vec)
Definition: VectorsVector.h:65
SWC::Core::VectorsVector::front
constexpr SWC_CAN_INLINE value_type & front() noexcept
Definition: VectorsVector.h:609
SWC::Core::VectorsVector::value_type
typename VectorT::value_type value_type
Definition: VectorsVector.h:24
SWC::Core::VectorsVector::GetIterator
constexpr SWC_CAN_INLINE Iterator GetIterator() noexcept
Definition: VectorsVector.h:571
SWC::Core::VectorsVector::count
constexpr SWC_CAN_INLINE size_t count() const noexcept
Definition: VectorsVector.h:600
SWC::Core::VectorsVector::ConstIterator::at
constexpr SWC_CAN_INLINE ConstIterator & at(size_t offset) noexcept
Definition: VectorsVector.h:344
SWC::Core::VectorsVector::front
constexpr SWC_CAN_INLINE const value_type & front() const noexcept
Definition: VectorsVector.h:619
SWC::Core::VectorsVector::operator!=
constexpr SWC_CAN_INLINE bool operator!=(const VectorsVector &other) const noexcept
Definition: VectorsVector.h:59
SWC::Core::VectorsVector::Iterator
Definition: VectorsVector.h:388
SWC::Core::VectorsVector::get
constexpr SWC_CAN_INLINE T get(size_t offset) noexcept
Definition: VectorsVector.h:559
SWC::Core::VectorsVector::operator[]
constexpr SWC_CAN_INLINE value_type * operator[](size_t pos) noexcept
Definition: VectorsVector.h:629
SWC::Core::VectorsVector::get
constexpr SWC_CAN_INLINE T get(size_t offset) const noexcept
Definition: VectorsVector.h:565
SWC::Core::VectorsVector::VectorsVector
constexpr SWC_CAN_INLINE VectorsVector() noexcept
Definition: VectorsVector.h:27
SWC::Core::VectorsVector::Iterator::Iterator
constexpr SWC_CAN_INLINE Iterator(VectorsT &a_vectors, size_t offset) noexcept
Definition: VectorsVector.h:402
SWC::Core::VectorsVector::ensure
SWC_CAN_INLINE void ensure()
Definition: VectorsVector.h:636
SWC::Core::VectorsVector::split
SWC_CAN_INLINE void split(size_t split_at, VectorsVector &to)
Definition: VectorsVector.h:669
SWC::Core::Vector< VectorT, uint32_t, 1 >::value_type
VectorT value_type
Definition: Vector.h:44
SWC::Core::VectorsVector::ConstIterator::ConstIterator
constexpr SWC_CAN_INLINE ConstIterator(const VectorsT &a_vectors) noexcept
Definition: VectorsVector.h:312
SWC::Core::VectorsVector::Iterator::at
constexpr SWC_CAN_INLINE Iterator & at(size_t offset) noexcept
Definition: VectorsVector.h:427
SWC::Core::VectorsVector::Iterator::remove
SWC_CAN_INLINE void remove(size_t number) noexcept
Definition: VectorsVector.h:512
SWC::Core::VectorsVector::Iterator::remove
SWC_CAN_INLINE void remove() noexcept
Definition: VectorsVector.h:501
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::Core::VectorsVector::push_back
SWC_CAN_INLINE void push_back(value_type &&value)
Definition: VectorsVector.h:652
SWC::Core::VectorsVector::GetIterator
constexpr SWC_CAN_INLINE Iterator GetIterator(size_t offset) noexcept
Definition: VectorsVector.h:576
Exception.h
SWC::Core::VectorsVector::Iterator::next
constexpr SWC_CAN_INLINE bool next() noexcept
Definition: VectorsVector.h:452
SWC::Core::VectorsVector::GetConstIterator
constexpr SWC_CAN_INLINE ConstIterator GetConstIterator() const noexcept
Definition: VectorsVector.h:581
SWC::Core::VectorsVector::add
SWC_CAN_INLINE void add(VectorsVector &&other)
Definition: VectorsVector.h:659
SWC::Core::VectorsVector::size_of_internal
constexpr SWC_CAN_INLINE size_t size_of_internal() const noexcept
Definition: VectorsVector.h:592
SWC::Core::VectorsVector::back
constexpr SWC_CAN_INLINE value_type & back() noexcept
Definition: VectorsVector.h:614
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Core::VectorsVector::ConstIterator::_vector
VectorsT::const_iterator _vector
Definition: VectorsVector.h:307
SWC::Core::VectorsVector::ConstIterator::operator==
constexpr SWC_CAN_INLINE bool operator==(const ConstIterator &other) const noexcept
Definition: VectorsVector.h:376
SWC::Core::VectorsVector
Definition: VectorsVector.h:20
size
uint32_t size
Buffer size.
Definition: HeaderBufferInfo.h:47
SWC::Core::Mem::operator==
bool SWC_PURE_FUNC operator==(ItemPtr l, ItemPtr r)
Definition: PageArena.h:380
SWC::Core::VectorsVector::Iterator::operator==
constexpr SWC_CAN_INLINE bool operator==(const Iterator &other) const noexcept
Definition: VectorsVector.h:459
SWC::Core::VectorsVector::Iterator::insert
SWC_CAN_INLINE void insert(const value_type &value)
Definition: VectorsVector.h:469
SWC::Core::VectorsVector::back
constexpr SWC_CAN_INLINE const value_type & back() const noexcept
Definition: VectorsVector.h:624
SWC::Core::VectorsVector::Iterator::_vectors
VectorsT & _vectors
Definition: VectorsVector.h:389
SWC::Core::VectorsVector::VectorsVector
SWC_CAN_INLINE VectorsVector(const VectorsVector &other)
Definition: VectorsVector.h:30
SWC::Core::VectorsVector::push_back
SWC_CAN_INLINE void push_back(const value_type &value)
Definition: VectorsVector.h:646
SWC::Core::VectorsVector::Iterator::item
constexpr SWC_CAN_INLINE value_type & item() noexcept
Definition: VectorsVector.h:464
SWC::Core::VectorsVector::Iterator::operator=
constexpr SWC_CAN_INLINE Iterator & operator=(const Iterator &other) noexcept
Definition: VectorsVector.h:420
SWC::Core::VectorsVector::Iterator::operator++
constexpr SWC_CAN_INLINE Iterator & operator++() noexcept
Definition: VectorsVector.h:445
SWC::Core::VectorsVector::ConstIterator::operator++
constexpr SWC_CAN_INLINE ConstIterator & operator++() noexcept
Definition: VectorsVector.h:362
SWC::Core::VectorsVector::print
void print(std::ostream &out) const
Definition: VectorsVector.h:676
SWC::Core::VectorsVector::Iterator::Iterator
constexpr SWC_CAN_INLINE Iterator(VectorsT &a_vectors) noexcept
Definition: VectorsVector.h:395
SWC::Core::VectorsVector::ConstIterator::item
constexpr SWC_CAN_INLINE const value_type & item() const noexcept
Definition: VectorsVector.h:381
SWC::Config::T
const uint64_t T
Definition: Property.h:27
SWC::Core::VectorsVector::Iterator::_item
VectorT::iterator _item
Definition: VectorsVector.h:391
SWC::Core::VectorsVector::ConstIterator::_item
VectorT::const_iterator _item
Definition: VectorsVector.h:308
SWC::Core::VectorsVector::operator=
SWC_CAN_INLINE VectorsVector & operator=(const VectorsVector &other)
Definition: VectorsVector.h:42
SWC::Core::VectorsVector::Iterator::_vector
VectorsT::iterator _vector
Definition: VectorsVector.h:390
SWC::Core::VectorsVector::get
constexpr SWC_CAN_INLINE T get() const noexcept
Definition: VectorsVector.h:553
SWC::Core::VectorsVector::ConstIterator::operator=
constexpr SWC_CAN_INLINE ConstIterator & operator=(const ConstIterator &other) noexcept
Definition: VectorsVector.h:337
SWC::Core::VectorsVector::get
constexpr SWC_CAN_INLINE T get() noexcept
Definition: VectorsVector.h:547
SWC::Core::VectorsVector::operator=
SWC_CAN_INLINE VectorsVector & operator=(VectorsVector &&other) noexcept
Definition: VectorsVector.h:48
SWC::Core::VectorsVector::Iterator::insert
SWC_CAN_INLINE void insert(value_type &&value)
Definition: VectorsVector.h:475
SWC::Core::VectorsVector::operator==
constexpr SWC_CAN_INLINE bool operator==(const VectorsVector &other) const noexcept
Definition: VectorsVector.h:54
SWC::Core::VectorsVector::VectorsVector
constexpr SWC_CAN_INLINE VectorsVector(VectorsVector &&other) noexcept
Definition: VectorsVector.h:35
SWC::Core::VectorsVector::ConstIterator::ConstIterator
constexpr SWC_CAN_INLINE ConstIterator(const VectorsT &a_vectors, size_t offset) noexcept
Definition: VectorsVector.h:319
SWC::Core::VectorsVector::~VectorsVector
~VectorsVector() noexcept
Definition: VectorsVector.h:39
SWC::Core::VectorsVector::ConstIterator
Definition: VectorsVector.h:305
SWC::Core::VectorsVector::GetConstIterator
constexpr SWC_CAN_INLINE ConstIterator GetConstIterator(size_t offset) const noexcept
Definition: VectorsVector.h:586
SWC::Core::VectorsVector::ConstIterator::_vectors
const VectorsT & _vectors
Definition: VectorsVector.h:306
SWC::Core::VectorsVector::ConstIterator::ConstIterator
constexpr SWC_CAN_INLINE ConstIterator(const ConstIterator &other) noexcept
Definition: VectorsVector.h:331
SWC::Core::VectorsVector::ConstIterator::next
constexpr SWC_CAN_INLINE bool next() noexcept
Definition: VectorsVector.h:369
SWC::Core::VectorsVector::Iterator::Iterator
constexpr SWC_CAN_INLINE Iterator(const Iterator &other) noexcept
Definition: VectorsVector.h:414