momo  3.12
vector.h
Go to the documentation of this file.
1 /**********************************************************\
2 
3  This file is part of the
4  https://github.com/morzhovets/momo
5  project, distributed under the MIT License. See
6  https://github.com/morzhovets/momo/blob/branch_cpp11/LICENSE
7  for details.
8 
9  momo/stdish/vector.h
10 
11  namespace momo::stdish:
12  class vector_adaptor
13  class vector
14  class vector_intcap
15 
16 \**********************************************************/
17 
18 #ifndef MOMO_INCLUDE_GUARD_STDISH_VECTOR
19 #define MOMO_INCLUDE_GUARD_STDISH_VECTOR
20 
21 #ifdef __has_include
22 # if __has_include(<momo/Utility.h>)
23 # include <momo/Utility.h>
24 # endif
25 #endif
26 #ifndef MOMO_PARENT_HEADER
27 # include "../Utility.h"
28 #endif
29 
30 #include MOMO_PARENT_HEADER(Array)
31 
32 #ifdef MOMO_HAS_CONTAINERS_RANGES
33 # include <ranges>
34 #endif
35 
36 namespace momo
37 {
38 
39 namespace stdish
40 {
41 
42 template<typename TArray>
44 {
45 private:
46  typedef TArray Array;
47  typedef typename Array::MemManager MemManager;
48 
50 
51 public:
52  typedef typename Array::Item value_type;
53  typedef typename std::allocator_traits<typename MemManager::ByteAllocator>
54  ::template rebind_alloc<value_type> allocator_type;
55 
56  typedef Array nested_container_type;
57 
58  typedef size_t size_type;
59  typedef ptrdiff_t difference_type;
60 
61  typedef typename Array::Iterator iterator;
63 
65  typedef const value_type& const_reference;
66 
67  typedef value_type* pointer;
68  typedef const value_type* const_pointer;
69  //typedef typename std::allocator_traits<allocator_type>::pointer pointer;
70  //typedef typename std::allocator_traits<allocator_type>::const_pointer const_pointer;
71 
72  typedef std::reverse_iterator<iterator> reverse_iterator;
73  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
74 
75 public:
76  vector_adaptor() noexcept(noexcept(Array()))
77  {
78  }
79 
80  explicit vector_adaptor(const allocator_type& alloc) noexcept
81  : mArray(MemManager(alloc))
82  {
83  }
84 
85  explicit vector_adaptor(size_type count, const allocator_type& alloc = allocator_type())
86  : mArray(count, MemManager(alloc))
87  {
88  }
89 
90  vector_adaptor(size_type count, const value_type& value,
91  const allocator_type& alloc = allocator_type())
92  : mArray(count, value, MemManager(alloc))
93  {
94  }
95 
96  template<typename Iterator,
97  typename = typename std::iterator_traits<Iterator>::iterator_category>
98  vector_adaptor(Iterator first, Iterator last, const allocator_type& alloc = allocator_type())
99  : mArray(first, last, MemManager(alloc))
100  {
101  }
102 
103  vector_adaptor(std::initializer_list<value_type> values,
104  const allocator_type& alloc = allocator_type())
105  : mArray(values, MemManager(alloc))
106  {
107  }
108 
109 #ifdef MOMO_HAS_CONTAINERS_RANGES
110  template<std::ranges::input_range Range>
111  requires std::convertible_to<std::ranges::range_reference_t<Range>, value_type>
112  vector_adaptor(std::from_range_t, Range&& values, const allocator_type& alloc = allocator_type())
113  : mArray(std::ranges::begin(values), std::ranges::end(values), MemManager(alloc))
114  {
115  }
116 #endif // MOMO_HAS_CONTAINERS_RANGES
117 
118  vector_adaptor(vector_adaptor&& right) noexcept
119  : vector_adaptor(std::move(right), right.get_allocator())
120  {
121  }
122 
124  noexcept(std::is_empty<allocator_type>::value)
125  : vector_adaptor(alloc)
126  {
127  if (right.get_allocator() == alloc)
128  {
129  mArray.Swap(right.mArray);
130  }
131  else
132  {
133  pvAssign(std::make_move_iterator(right.begin()), std::make_move_iterator(right.end()));
134  right.mArray.Clear(true);
135  }
136  }
137 
139  : mArray(right.mArray)
140  {
141  }
142 
143  vector_adaptor(const vector_adaptor& right, const allocator_type& alloc)
144  : mArray(right.mArray, MemManager(alloc))
145  {
146  }
147 
148  ~vector_adaptor() = default;
149 
152  {
153  return momo::internal::ContainerAssignerStd::Move(std::move(right), *this);
154  }
155 
157  {
158  return momo::internal::ContainerAssignerStd::Copy(right, *this);
159  }
160 
161  vector_adaptor& operator=(std::initializer_list<value_type> values)
162  {
163  assign(values);
164  return *this;
165  }
166 
167  void swap(vector_adaptor& right) noexcept
168  {
170  }
171 
172  friend void swap(vector_adaptor& left, vector_adaptor& right) noexcept
173  {
174  left.swap(right);
175  }
176 
178  {
179  return mArray;
180  }
181 
183  {
184  return mArray;
185  }
186 
187  const_iterator begin() const noexcept
188  {
189  return mArray.GetBegin();
190  }
191 
192  iterator begin() noexcept
193  {
194  return mArray.GetBegin();
195  }
196 
197  const_iterator end() const noexcept
198  {
199  return mArray.GetEnd();
200  }
201 
202  iterator end() noexcept
203  {
204  return mArray.GetEnd();
205  }
206 
208  {
209  return const_reverse_iterator(end());
210  }
211 
213  {
214  return reverse_iterator(end());
215  }
216 
217  const_reverse_iterator rend() const noexcept
218  {
219  return const_reverse_iterator(begin());
220  }
221 
223  {
224  return reverse_iterator(begin());
225  }
226 
227  const_iterator cbegin() const noexcept
228  {
229  return begin();
230  }
231 
232  const_iterator cend() const noexcept
233  {
234  return end();
235  }
236 
238  {
239  return rbegin();
240  }
241 
242  const_reverse_iterator crend() const noexcept
243  {
244  return rend();
245  }
246 
247  value_type* data() noexcept
248  {
249  return mArray.GetItems();
250  }
251 
252  const value_type* data() const noexcept
253  {
254  return mArray.GetItems();
255  }
256 
257  allocator_type get_allocator() const noexcept
258  {
259  return allocator_type(mArray.GetMemManager().GetByteAllocator());
260  }
261 
262  size_type max_size() const noexcept
263  {
264  return std::allocator_traits<allocator_type>::max_size(get_allocator());
265  }
266 
267  size_type size() const noexcept
268  {
269  return mArray.GetCount();
270  }
271 
273  {
274  mArray.SetCount(size);
275  }
276 
277  void resize(size_type size, const value_type& value)
278  {
279  mArray.SetCount(size, value);
280  }
281 
282  MOMO_NODISCARD bool empty() const noexcept
283  {
284  return mArray.IsEmpty();
285  }
286 
287  void clear() noexcept
288  {
289  mArray.Clear();
290  }
291 
292  size_type capacity() const noexcept
293  {
294  return mArray.GetCapacity();
295  }
296 
297  void reserve(size_type count)
298  {
299  mArray.Reserve(count);
300  }
301 
303  {
304  mArray.Shrink();
305  }
306 
308  {
309  return mArray[index];
310  }
311 
313  {
314  return mArray[index];
315  }
316 
318  {
319  if (index >= size())
320  MOMO_THROW(std::out_of_range("invalid vector subscript"));
321  return mArray[index];
322  }
323 
325  {
326  if (index >= size())
327  MOMO_THROW(std::out_of_range("invalid vector subscript"));
328  return mArray[index];
329  }
330 
332  {
333  return mArray[0];
334  }
335 
337  {
338  return mArray[0];
339  }
340 
342  {
343  return mArray.GetBackItem();
344  }
345 
347  {
348  return mArray.GetBackItem();
349  }
350 
351  void push_back(value_type&& value)
352  {
353  mArray.AddBack(std::move(value));
354  }
355 
356  void push_back(const value_type& value)
357  {
358  mArray.AddBack(value);
359  }
360 
362  {
363  size_t index = SMath::Dist(cbegin(), where);
364  mArray.Insert(index, std::move(value));
365  return SMath::Next(begin(), index);
366  }
367 
369  {
370  size_t index = SMath::Dist(cbegin(), where);
371  mArray.Insert(index, value);
372  return SMath::Next(begin(), index);
373  }
374 
375  iterator insert(const_iterator where, size_type count, const value_type& value)
376  {
377  size_t index = SMath::Dist(cbegin(), where);
378  mArray.Insert(index, count, value);
379  return SMath::Next(begin(), index);
380  }
381 
382  template<typename Iterator,
383  typename = typename std::iterator_traits<Iterator>::iterator_category>
384  iterator insert(const_iterator where, Iterator first, Iterator last)
385  {
386  size_t index = SMath::Dist(cbegin(), where);
387  mArray.Insert(index, first, last);
388  return SMath::Next(begin(), index);
389  }
390 
391  iterator insert(const_iterator where, std::initializer_list<value_type> values)
392  {
393  size_t index = SMath::Dist(cbegin(), where);
394  mArray.Insert(index, values);
395  return SMath::Next(begin(), index);
396  }
397 
398  template<typename... ValueArgs>
399  reference emplace_back(ValueArgs&&... valueArgs)
400  {
401  mArray.AddBackVar(std::forward<ValueArgs>(valueArgs)...);
402  return back();
403  }
404 
405  template<typename... ValueArgs>
406  iterator emplace(const_iterator where, ValueArgs&&... valueArgs)
407  {
408  size_t index = SMath::Dist(cbegin(), where);
409  mArray.InsertVar(index, std::forward<ValueArgs>(valueArgs)...);
410  return SMath::Next(begin(), index);
411  }
412 
413 #ifdef MOMO_HAS_CONTAINERS_RANGES
414  template<std::ranges::input_range Range>
415  requires std::convertible_to<std::ranges::range_reference_t<Range>, value_type>
416  void append_range(Range&& values)
417  {
418  insert_range(cend(), std::forward<Range>(values));
419  }
420 
421  template<std::ranges::input_range Range>
422  requires std::convertible_to<std::ranges::range_reference_t<Range>, value_type>
423  iterator insert_range(const_iterator where, Range&& values)
424  {
425  size_t index = SMath::Dist(cbegin(), where);
426  mArray.Insert(index, std::ranges::begin(values), std::ranges::end(values));
427  return SMath::Next(begin(), index);
428  }
429 #endif // MOMO_HAS_CONTAINERS_RANGES
430 
431  void pop_back()
432  {
433  mArray.RemoveBack();
434  }
435 
437  {
438  return erase(where, where + 1);
439  }
440 
442  {
443  size_t index = SMath::Dist(cbegin(), first);
444  mArray.Remove(index, SMath::Dist(first, last));
445  return SMath::Next(begin(), index);
446  }
447 
448  template<typename ValueArg = value_type>
449  friend size_type erase(vector_adaptor& cont, const ValueArg& valueArg)
450  {
451  auto valueFilter = [&valueArg] (const value_type& value)
452  { return value == valueArg; };
453  return cont.mArray.Remove(valueFilter);
454  }
455 
456  template<typename ValueFilter>
457  friend size_type erase_if(vector_adaptor& cont, const ValueFilter& valueFilter)
458  {
459  return cont.mArray.Remove(valueFilter);
460  }
461 
462  void assign(size_type count, const value_type& value)
463  {
464  mArray = Array(count, value, MemManager(get_allocator()));
465  }
466 
467  template<typename Iterator,
468  typename = typename std::iterator_traits<Iterator>::iterator_category>
469  void assign(Iterator first, Iterator last)
470  {
471  pvAssign(first, last);
472  }
473 
474  void assign(std::initializer_list<value_type> values)
475  {
476  pvAssign(values.begin(), values.end());
477  }
478 
479 #ifdef MOMO_HAS_CONTAINERS_RANGES
480  template<std::ranges::input_range Range>
481  requires std::convertible_to<std::ranges::range_reference_t<Range>, value_type>
482  void assign_range(Range&& values)
483  {
484  pvAssign(std::ranges::begin(values), std::ranges::end(values));
485  }
486 #endif // MOMO_HAS_CONTAINERS_RANGES
487 
488  friend bool operator==(const vector_adaptor& left, const vector_adaptor& right)
489  {
490  return left.mArray.IsEqual(right.mArray);
491  }
492 
493 #ifdef MOMO_HAS_THREE_WAY_COMPARISON
494  friend auto operator<=>(const vector_adaptor& left, const vector_adaptor& right)
495  requires requires (const_reference ref) { std::tie(ref) <=> std::tie(ref); }
496  {
497  auto valueThreeComp = [] (const value_type& value1, const value_type& value2)
498  { return std::tie(value1) <=> std::tie(value2); };
499  return std::lexicographical_compare_three_way(left.begin(), left.end(),
500  right.begin(), right.end(), valueThreeComp);
501  }
502 #else
503  friend bool operator<(const vector_adaptor& left, const vector_adaptor& right)
504  {
505  return std::lexicographical_compare(left.begin(), left.end(), right.begin(), right.end());
506  }
507 #endif
508 
510 
511 private:
512  template<typename Iterator, typename Sentinel>
513  void pvAssign(Iterator begin, Sentinel end)
514  {
515  mArray = Array(std::move(begin), std::move(end), MemManager(get_allocator()));
516  }
517 
518 private:
519  Array mArray;
520 };
521 
533 template<typename TValue,
534  typename TAllocator = std::allocator<TValue>>
535 class vector : public vector_adaptor<Array<TValue, MemManagerStd<TAllocator>>>
536 {
537 private:
539 
540 public:
541  using VectorAdaptor::VectorAdaptor;
542 
543  vector& operator=(std::initializer_list<typename VectorAdaptor::value_type> values)
544  {
545  VectorAdaptor::operator=(values);
546  return *this;
547  }
548 
549  friend void swap(vector& left, vector& right) noexcept
550  {
551  left.swap(right);
552  }
553 };
554 
555 #ifdef MOMO_HAS_DEDUCTION_GUIDES
556 
557 namespace internal
558 {
559  template<typename Allocator,
560  typename = decltype(std::declval<Allocator&>().allocate(size_t{}))>
561  class vector_checker
562  {
563  };
564 }
565 
566 template<typename Value,
567  typename Allocator = std::allocator<Value>,
568  typename = internal::vector_checker<Allocator>>
569 vector(size_t, Value, Allocator = Allocator())
570  -> vector<Value, Allocator>;
571 template<typename Iterator,
572  typename Value = typename std::iterator_traits<Iterator>::value_type,
573  typename Allocator = std::allocator<Value>,
574  typename = internal::vector_checker<Allocator>>
575 vector(Iterator, Iterator, Allocator = Allocator())
576  -> vector<Value, Allocator>;
577 template<typename Value,
578  typename Allocator = std::allocator<Value>,
579  typename = internal::vector_checker<Allocator>>
580 vector(std::initializer_list<Value>, Allocator = Allocator())
581  -> vector<Value, Allocator>;
582 template<typename Value, typename Allocator>
583 vector(vector<Value, Allocator>, momo::internal::Identity<Allocator>)
584  -> vector<Value, Allocator>;
585 
586 #ifdef MOMO_HAS_CONTAINERS_RANGES
587 template<std::ranges::input_range Range,
588  typename Value = std::ranges::range_value_t<Range>,
589  typename Allocator = std::allocator<Value>,
590  typename = internal::vector_checker<Allocator>>
591 vector(std::from_range_t, Range&&, Allocator = Allocator())
592  -> vector<Value, Allocator>;
593 #endif // MOMO_HAS_CONTAINERS_RANGES
594 
595 #endif // MOMO_HAS_DEDUCTION_GUIDES
596 
606 template<size_t tInternalCapacity, typename TValue,
607  typename TAllocator = std::allocator<TValue>>
609  tInternalCapacity, TValue, MemManagerStd<TAllocator>>>;
610 
611 } // namespace stdish
612 
613 } // namespace momo
614 
615 #endif // MOMO_INCLUDE_GUARD_STDISH_VECTOR
momo::stdish::vector_adaptor::crbegin
const_reverse_iterator crbegin() const noexcept
Definition: vector.h:237
momo::stdish::vector_adaptor::data
const value_type * data() const noexcept
Definition: vector.h:252
momo::stdish::vector::swap
friend void swap(vector &left, vector &right) noexcept
Definition: vector.h:549
momo::stdish::vector_adaptor::end
iterator end() noexcept
Definition: vector.h:202
MOMO_MORE_COMPARISON_OPERATORS
#define MOMO_MORE_COMPARISON_OPERATORS(RClass)
Definition: Utility.h:86
momo::stdish::vector_adaptor::push_back
void push_back(const value_type &value)
Definition: vector.h:356
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(Iterator first, Iterator last, const allocator_type &alloc=allocator_type())
Definition: vector.h:98
MOMO_THROW
#define MOMO_THROW(exception)
Definition: UserSettings.h:191
momo::ArrayCore
Definition: Array.h:197
momo::stdish::vector_adaptor::assign
void assign(size_type count, const value_type &value)
Definition: vector.h:462
momo::stdish::vector_adaptor::rend
reverse_iterator rend() noexcept
Definition: vector.h:222
momo::stdish::vector_adaptor::operator==
friend bool operator==(const vector_adaptor &left, const vector_adaptor &right)
Definition: vector.h:488
momo::stdish::vector_adaptor::erase
friend size_type erase(vector_adaptor &cont, const ValueArg &valueArg)
Definition: vector.h:449
momo::stdish::vector_adaptor::nested_container_type
Array nested_container_type
Definition: vector.h:56
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(vector_adaptor &&right, const allocator_type &alloc) noexcept(std::is_empty< allocator_type >::value)
Definition: vector.h:123
momo::stdish::vector_adaptor::~vector_adaptor
~vector_adaptor()=default
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(size_type count, const allocator_type &alloc=allocator_type())
Definition: vector.h:85
momo::stdish::vector_adaptor::size_type
size_t size_type
Definition: vector.h:58
momo::stdish::vector_adaptor::capacity
size_type capacity() const noexcept
Definition: vector.h:292
momo::stdish::vector_adaptor::empty
MOMO_NODISCARD bool empty() const noexcept
Definition: vector.h:282
momo::stdish::vector_adaptor::iterator
Array::Iterator iterator
Definition: vector.h:61
momo::stdish::vector_adaptor::operator=
vector_adaptor & operator=(const vector_adaptor &right)
Definition: vector.h:156
momo::stdish::vector_adaptor::max_size
size_type max_size() const noexcept
Definition: vector.h:262
momo::stdish::vector_adaptor::insert
iterator insert(const_iterator where, size_type count, const value_type &value)
Definition: vector.h:375
momo::stdish::vector_adaptor::operator<
friend bool operator<(const vector_adaptor &left, const vector_adaptor &right)
Definition: vector.h:503
momo::stdish::vector_adaptor::back
reference back()
Definition: vector.h:341
momo::stdish::vector_adaptor::rend
const_reverse_iterator rend() const noexcept
Definition: vector.h:217
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(const vector_adaptor &right, const allocator_type &alloc)
Definition: vector.h:143
momo::stdish::vector_adaptor::insert
iterator insert(const_iterator where, const value_type &value)
Definition: vector.h:368
momo::stdish::vector_adaptor::operator[]
const_reference operator[](size_type index) const
Definition: vector.h:307
momo::MemManagerStd
MemManagerStd uses allocator<unsigned char>::allocate and deallocate
Definition: MemManager.h:179
momo::ArrayCore::ConstIterator
IteratorSelector::ConstIterator ConstIterator
Definition: Array.h:513
momo::stdish::vector_adaptor::reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
Definition: vector.h:72
momo::ArrayCore::MemManager
ItemTraits::MemManager MemManager
Definition: Array.h:202
momo::stdish::vector_adaptor::resize
void resize(size_type size)
Definition: vector.h:272
momo::stdish::vector::operator=
vector & operator=(std::initializer_list< typename VectorAdaptor::value_type > values)
Definition: vector.h:543
momo::internal::UIntMath::Dist
static UInt Dist(Iterator begin, Iterator end)
Definition: Utility.h:364
momo::ArrayCore::Item
ItemTraits::Item Item
Definition: Array.h:201
momo::stdish::vector_adaptor::erase_if
friend size_type erase_if(vector_adaptor &cont, const ValueFilter &valueFilter)
Definition: vector.h:457
momo::stdish::vector_adaptor::get_nested_container
const nested_container_type & get_nested_container() const noexcept
Definition: vector.h:177
momo::stdish::vector
momo::stdish::vector is similar to std::vector.
Definition: vector.h:536
momo::internal::ContainerAssignerStd::Move
static Container & Move(Container &&srcCont, Container &dstCont) noexcept(IsNothrowMoveAssignable< Container >::value)
Definition: Utility.h:515
momo::stdish::vector_adaptor::value_type
Array::Item value_type
Definition: vector.h:52
momo::stdish::vector_adaptor::const_pointer
const value_type * const_pointer
Definition: vector.h:68
momo::stdish::vector_adaptor::erase
iterator erase(const_iterator where)
Definition: vector.h:436
momo::stdish::vector_adaptor::front
reference front()
Definition: vector.h:331
momo::stdish::vector_adaptor::shrink_to_fit
void shrink_to_fit()
Definition: vector.h:302
momo::stdish::vector_adaptor::crend
const_reverse_iterator crend() const noexcept
Definition: vector.h:242
momo::stdish::vector_adaptor::get_allocator
allocator_type get_allocator() const noexcept
Definition: vector.h:257
momo
Definition: Array.h:27
momo::stdish::vector_adaptor::data
value_type * data() noexcept
Definition: vector.h:247
momo::internal::ContainerAssignerStd::IsNothrowMoveAssignable
BoolConstant< std::is_empty< Allocator >::value||std::allocator_traits< Allocator >::propagate_on_container_move_assignment::value > IsNothrowMoveAssignable
Definition: Utility.h:511
momo::ArrayCore::Iterator
IteratorSelector::Iterator Iterator
Definition: Array.h:514
momo::stdish::vector_adaptor::insert
iterator insert(const_iterator where, Iterator first, Iterator last)
Definition: vector.h:384
momo::stdish::vector_adaptor::begin
const_iterator begin() const noexcept
Definition: vector.h:187
momo::internal::Identity
EnableIf< true, Type > Identity
Definition: Utility.h:202
momo::stdish::vector_adaptor::const_iterator
Array::ConstIterator const_iterator
Definition: vector.h:62
momo::stdish::vector_adaptor::allocator_type
std::allocator_traits< typename MemManager::ByteAllocator >::template rebind_alloc< value_type > allocator_type
Definition: vector.h:54
momo::stdish::vector_adaptor::operator=
vector_adaptor & operator=(vector_adaptor &&right) noexcept(momo::internal::ContainerAssignerStd::IsNothrowMoveAssignable< vector_adaptor >::value)
Definition: vector.h:150
momo::stdish::vector_adaptor::reserve
void reserve(size_type count)
Definition: vector.h:297
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor() noexcept(noexcept(Array()))
Definition: vector.h:76
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(const allocator_type &alloc) noexcept
Definition: vector.h:80
momo::stdish::vector_adaptor::push_back
void push_back(value_type &&value)
Definition: vector.h:351
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(size_type count, const value_type &value, const allocator_type &alloc=allocator_type())
Definition: vector.h:90
momo::stdish::vector_adaptor::cend
const_iterator cend() const noexcept
Definition: vector.h:232
momo::stdish::vector_adaptor::swap
void swap(vector_adaptor &right) noexcept
Definition: vector.h:167
momo::stdish::vector_adaptor::const_reference
const value_type & const_reference
Definition: vector.h:65
momo::stdish::vector_adaptor::reference
value_type & reference
Definition: vector.h:64
momo::stdish::vector_adaptor::at
reference at(size_type index)
Definition: vector.h:324
momo::stdish::vector_adaptor::size
size_type size() const noexcept
Definition: vector.h:267
momo::stdish::vector_adaptor::pointer
value_type * pointer
Definition: vector.h:67
momo::stdish::vector_adaptor::resize
void resize(size_type size, const value_type &value)
Definition: vector.h:277
momo::stdish::vector_adaptor::erase
iterator erase(const_iterator first, const_iterator last)
Definition: vector.h:441
momo::stdish::vector_adaptor::end
const_iterator end() const noexcept
Definition: vector.h:197
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(std::initializer_list< value_type > values, const allocator_type &alloc=allocator_type())
Definition: vector.h:103
std
Definition: Array.h:1178
momo::stdish::vector_adaptor::assign
void assign(Iterator first, Iterator last)
Definition: vector.h:469
momo::stdish::vector_adaptor
Definition: vector.h:44
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(const vector_adaptor &right)
Definition: vector.h:138
momo::stdish::vector_adaptor::front
const_reference front() const
Definition: vector.h:336
momo::stdish::vector_adaptor::insert
iterator insert(const_iterator where, std::initializer_list< value_type > values)
Definition: vector.h:391
momo::stdish::vector_adaptor::emplace_back
reference emplace_back(ValueArgs &&... valueArgs)
Definition: vector.h:399
momo::internal::UIntMath::Next
static Iterator Next(Iterator iter, UInt dist)
Definition: Utility.h:371
momo::stdish::vector_adaptor::pop_back
void pop_back()
Definition: vector.h:431
momo::stdish::vector_adaptor::operator=
vector_adaptor & operator=(std::initializer_list< value_type > values)
Definition: vector.h:161
momo::stdish::vector_adaptor::const_reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: vector.h:73
momo::stdish::vector_adaptor::get_nested_container
nested_container_type & get_nested_container() noexcept
Definition: vector.h:182
momo::stdish::vector_adaptor::cbegin
const_iterator cbegin() const noexcept
Definition: vector.h:227
momo::stdish::vector_adaptor::operator[]
reference operator[](size_type index)
Definition: vector.h:312
momo::stdish::vector_adaptor::emplace
iterator emplace(const_iterator where, ValueArgs &&... valueArgs)
Definition: vector.h:406
momo::stdish::vector_adaptor::assign
void assign(std::initializer_list< value_type > values)
Definition: vector.h:474
momo::internal::ContainerAssignerStd::Copy
static Container & Copy(const Container &srcCont, Container &dstCont)
Definition: Utility.h:531
momo::stdish::vector_adaptor::swap
friend void swap(vector_adaptor &left, vector_adaptor &right) noexcept
Definition: vector.h:172
momo::stdish::vector_adaptor::begin
iterator begin() noexcept
Definition: vector.h:192
momo::stdish::vector_adaptor::difference_type
ptrdiff_t difference_type
Definition: vector.h:59
momo::stdish::vector_adaptor::rbegin
const_reverse_iterator rbegin() const noexcept
Definition: vector.h:207
Utility.h
momo::internal::UIntMath
Definition: Utility.h:335
momo::stdish::vector_adaptor::at
const_reference at(size_type index) const
Definition: vector.h:317
momo::internal::ContainerAssignerStd::Swap
static void Swap(Container &cont1, Container &cont2) noexcept
Definition: Utility.h:546
momo::stdish::vector_adaptor::insert
iterator insert(const_iterator where, value_type &&value)
Definition: vector.h:361
momo::stdish::vector_adaptor::back
const_reference back() const
Definition: vector.h:346
MOMO_NODISCARD
#define MOMO_NODISCARD
Definition: UserSettings.h:262
momo::stdish::vector_adaptor::rbegin
reverse_iterator rbegin() noexcept
Definition: vector.h:212
momo::stdish::vector_adaptor::clear
void clear() noexcept
Definition: vector.h:287
momo::stdish::vector_adaptor::vector_adaptor
vector_adaptor(vector_adaptor &&right) noexcept
Definition: vector.h:118