8#ifndef META_OCEAN_BASE_STATIC_VECTOR_H
9#define META_OCEAN_BASE_STATIC_VECTOR_H
23template <
typename T,
size_t tCapacity>
79 inline size_t size()
const;
126 template <
typename... TArgs>
136 template <
typename... TArgs>
145 template <
size_t tCapacity2>
192 inline void erase(
const size_t index);
276 inline const T*
end()
const;
318 explicit inline operator bool()
const;
326template <
typename T,
size_t tCapacity>
331 static_assert(tCapacity > 0,
"Invalid vector capacity!");
334template <
typename T,
size_t tCapacity>
339 static_assert(tCapacity > 0,
"Invalid vector capacity!");
342template <
typename T,
size_t tCapacity>
344 StaticBuffer<T, tCapacity>(std::min(number, tCapacity), value),
345 size_(std::min(number, tCapacity))
347 static_assert(tCapacity > 0,
"Invalid vector capacity!");
349 ocean_assert(number <= tCapacity);
352template <
typename T,
size_t tCapacity>
355 static_assert(tCapacity > 0,
"Invalid vector capacity!");
357 ocean_assert(size <= tCapacity);
359 const size_t actualSize = std::min(size, tCapacity);
361 for (
size_t n = 0; n < actualSize; ++n)
363 this->elements_[n] = values[n];
369template <
typename T,
size_t tCapacity>
372 size_(std::min(tCapacity, values.size()))
374 static_assert(tCapacity > 0,
"Invalid vector capacity!");
377template <
typename T,
size_t tCapacity>
379 size_(std::min(tCapacity, values.size()))
381 static_assert(tCapacity > 0,
"Invalid vector capacity!");
383 for (
size_t n = 0; n <
size_; ++n)
385 this->
elements_[n] = std::move(values[n]);
389template <
typename T,
size_t tCapacity>
395template <
typename T,
size_t tCapacity>
398 return size_ == tCapacity;
401template <
typename T,
size_t tCapacity>
404 ocean_assert(size_ < tCapacity);
406 this->elements_[size_++] = value;
409template <
typename T,
size_t tCapacity>
412 ocean_assert(size_ < tCapacity);
414 this->elements_[size_++] = std::move(value);
417template <
typename T,
size_t tCapacity>
420 if (size_ >= tCapacity)
425 this->elements_[size_++] = value;
430template <
typename T,
size_t tCapacity>
433 if (size_ >= tCapacity)
438 this->elements_[size_++] = std::move(value);
443template <
typename T,
size_t tCapacity>
444template <
typename... TArgs>
447 ocean_assert(size_ < tCapacity);
449 this->elements_[size_++] = T(std::forward<TArgs>(args)...);
452template <
typename T,
size_t tCapacity>
453template <
typename... TArgs>
456 if (size_ >= tCapacity)
461 this->elements_[size_++] = T(std::forward<TArgs>(args)...);
466template <
typename T,
size_t tCapacity>
467template <
size_t tCapacity2>
470 size_t elements = std::min(value.
size(), tCapacity - size_);
472 for (
size_t n = 0; n < elements; ++n)
474 this->elements_[n + size_] = value[n];
480template <
typename T,
size_t tCapacity>
483 size_t elements = std::min(value.size(), tCapacity - size_);
485 for (
size_t n = 0; n < elements; ++n)
487 this->elements_[n + size_] = value[n];
493template <
typename T,
size_t tCapacity>
496 ocean_assert(size_ > 0);
498 this->elements_[--size_] = T();
501template <
typename T,
size_t tCapacity>
506 this->elements_[--size_] = T();
510template <
typename T,
size_t tCapacity>
513 ocean_assert(size_ > 0);
518template <
typename T,
size_t tCapacity>
527template <
typename T,
size_t tCapacity>
530 ocean_assert(!empty());
532 return this->elements_[0];
535template <
typename T,
size_t tCapacity>
538 ocean_assert(!empty());
540 return this->elements_[0];
543template <
typename T,
size_t tCapacity>
546 ocean_assert(!empty());
548 return this->elements_[size_ - 1];
551template <
typename T,
size_t tCapacity>
554 ocean_assert(!empty());
556 return this->elements_[size_ - 1];
559template <
typename T,
size_t tCapacity>
562 return this->elements_;
565template <
typename T,
size_t tCapacity>
568 return this->elements_;
571template <
typename T,
size_t tCapacity>
574 return this->elements_ + size_;
577template <
typename T,
size_t tCapacity>
580 return this->elements_ + size_;
583template <
typename T,
size_t tCapacity>
589template <
typename T,
size_t tCapacity>
592 ocean_assert(index < size_);
594 for (
size_t n = index + 1; n < size_; ++n)
596 this->elements_[n - 1] = std::move(this->elements_[n]);
599 this->elements_[--size_] = T();
602template <
typename T,
size_t tCapacity>
605 ocean_assert(index < size_);
611 this->elements_[index] = std::move(this->elements_[size_]);
614 this->elements_[size_] = T();
617template <
typename T,
size_t tCapacity>
620 ocean_assert(size <= tCapacity);
626 for (
size_t n = size; n < size_; ++n)
628 this->elements_[n] = T();
635 for (
size_t n = size_; n < size; ++n)
637 this->elements_[n] = T();
644template <
typename T,
size_t tCapacity>
647 ocean_assert(size <= tCapacity);
652template <
typename T,
size_t tCapacity>
655 for (
size_t n = 0; n < size_; ++n)
657 this->elements_[n] = T();
663template <
typename T,
size_t tCapacity>
669template <
typename T,
size_t tCapacity>
672 ocean_assert(index < size_);
674 return this->elements_[index];
677template <
typename T,
size_t tCapacity>
680 ocean_assert(index < size_);
682 return this->elements_[index];
685template <
typename T,
size_t tCapacity>
688 if (size_ != second.
size_)
693 for (
size_t n = 0; n < size_; ++n)
695 if (this->elements_[n] != second.
elements_[n])
704template <
typename T,
size_t tCapacity>
707 return !(*
this == second);
710template <
typename T,
size_t tCapacity>
This class implements a static buffer that has a fixed capacity.
Definition StaticBuffer.h:24
T elements_[tCapacity > size_t(0) ? tCapacity :size_t(1)]
Elements of this buffer (with at least one entry).
Definition StaticBuffer.h:160
This class implements a static vector that has a fixed capacity.
Definition StaticVector.h:25
size_t size_
The current number of stored elements, with range [0, tCapacity].
Definition StaticVector.h:323
void emplaceBack(TArgs &&... args)
Constructs a new element in-place at the end of this vector.
Definition StaticVector.h:445
bool securePushBack(T &&value)
Adds a new element to this vector if this vector has free elements left, otherwise nothing happens.
Definition StaticVector.h:431
StaticVector(const T *values, const size_t size)
Creates a new vector object.
Definition StaticVector.h:353
StaticVector(const size_t number, const T &value)
Creates a new vector object.
Definition StaticVector.h:343
const T & front() const
Returns the first elements of this vector.
Definition StaticVector.h:528
void pushBack(const std::vector< T > &value)
Adds a new elements to this vector.
Definition StaticVector.h:481
void secureWeakPopBack()
Removes the last element from this vector.
Definition StaticVector.h:519
size_t size() const
Returns the size of this vector.
Definition StaticVector.h:390
bool occupied() const
Returns whether no free space is left.
Definition StaticVector.h:396
T & back()
Returns the last elements of this vector.
Definition StaticVector.h:552
void popBack()
Removes the last element from this vector.
Definition StaticVector.h:494
bool secureEmplaceBack(TArgs &&... args)
Constructs a new element in-place at the end of this vector if this vector has free elements left.
Definition StaticVector.h:454
void erase(const size_t index)
Erases one element of this vector.
Definition StaticVector.h:590
T & operator[](const size_t index)
Returns one element of this vector.
Definition StaticVector.h:678
void clear()
Clears all elements of this vector.
Definition StaticVector.h:653
T * end()
Returns an iterator to the end of the vector.
Definition StaticVector.h:572
void pushBack(T &&value)
Adds a new element to this vector.
Definition StaticVector.h:410
void securePopBack()
Removes the last element from this vector.
Definition StaticVector.h:502
const T * begin() const
Returns a const iterator to the beginning of the vector.
Definition StaticVector.h:566
StaticVector()=default
Creates a new vector object.
StaticVector(std::vector< T > &&values)
Creates a new vector object.
Definition StaticVector.h:378
void weakClear()
Clears all elements of this vector by setting the internal index to zero (all stored elements are unt...
Definition StaticVector.h:664
StaticVector(const T &value)
Creates a new vector object.
Definition StaticVector.h:327
void resize(const size_t size)
Resizes this vector.
Definition StaticVector.h:618
void unstableErase(const size_t index)
Erases one element from this vector.
Definition StaticVector.h:603
StaticVector(T &&value)
Creates a new vector object.
Definition StaticVector.h:335
void pushBack(const StaticVector< T, tCapacity2 > &value)
Adds a new elements to this vector.
Definition StaticVector.h:468
bool operator!=(const StaticVector< T, tCapacity > &second) const
Returns whether two vectors are not identical.
Definition StaticVector.h:705
StaticVector(const std::vector< T > &values)
Creates a new vector object.
Definition StaticVector.h:370
void weakResize(const size_t size)
Resizes this vector.
Definition StaticVector.h:645
void weakPopBack()
Removes the last element from this vector.
Definition StaticVector.h:511
T & front()
Returns the first elements of this vector.
Definition StaticVector.h:536
bool empty() const
Returns whether this vector hold no element.
Definition StaticVector.h:584
void pushBack(const T &value)
Adds a new element to this vector.
Definition StaticVector.h:402
bool securePushBack(const T &value)
Adds a new element to this vector if this vector has free elements left, otherwise nothing happens.
Definition StaticVector.h:418
const T * end() const
Returns a const iterator to the end of the vector.
Definition StaticVector.h:578
const T & operator[](const size_t index) const
Returns one element of this vector.
Definition StaticVector.h:670
const T & back() const
Returns the last elements of this vector.
Definition StaticVector.h:544
T * begin()
Returns an iterator to the beginning of the vector.
Definition StaticVector.h:560
bool operator==(const StaticVector< T, tCapacity > &second) const
Returns whether two vectors are identical.
Definition StaticVector.h:686
The namespace covering the entire Ocean framework.
Definition Accessor.h:15