8#ifndef META_OCEAN_BASE_STACK_HEAP_VECTOR_H
9#define META_OCEAN_BASE_STACK_HEAP_VECTOR_H
25template <
typename T,
size_t tStackCapacity>
28 static_assert(tStackCapacity >= 1,
"Invalid stack capacity!");
197 template <
typename... TArgs>
300 ConstIterator
end()
const;
328template <
typename T,
size_t tStackCapacity>
336template <
typename T,
size_t tStackCapacity>
344template <
typename T,
size_t tStackCapacity>
354template <
typename T,
size_t tStackCapacity>
357 return vector_[index_];
360template <
typename T,
size_t tStackCapacity>
363 ocean_assert(&vector_ == &iterator.
vector_);
365 return &vector_ == &iterator.
vector_ && index_ == iterator.
index_;
368template <
typename T,
size_t tStackCapacity>
371 return !(*
this == iterator);
374template <
typename T,
size_t tStackCapacity>
382template <
typename T,
size_t tStackCapacity>
390template <
typename T,
size_t tStackCapacity>
400template <
typename T,
size_t tStackCapacity>
403 return vector_[index_];
406template <
typename T,
size_t tStackCapacity>
409 ocean_assert(&vector_ == &iterator.
vector_);
411 return &vector_ == &iterator.
vector_ && index_ == iterator.
index_;
414template <
typename T,
size_t tStackCapacity>
417 return !(*
this == iterator);
420template <
typename T,
size_t tStackCapacity>
426template <
typename T,
size_t tStackCapacity>
431 for (
size_t n = 0; n <
size; ++n)
437template <
typename T,
size_t tStackCapacity>
442 for (T& element : elements)
448template <
typename T,
size_t tStackCapacity>
453 for (
const T& element : elements)
459template <
typename T,
size_t tStackCapacity>
464 for (
const T& element : elements)
470template <
typename T,
size_t tStackCapacity>
473 if (
size_ < tStackCapacity)
485template <
typename T,
size_t tStackCapacity>
488 if (
size_ < tStackCapacity)
500template <
typename T,
size_t tStackCapacity>
501template <
typename... TArgs>
504 const size_t index =
size_;
508 if (index < tStackCapacity)
516 return heapElements_.emplace_back(std::forward<TArgs>(args)...);
520template <
typename T,
size_t tStackCapacity>
523 ocean_assert(
size_ >= 1);
527 if (
size_ >= tStackCapacity)
537template <
typename T,
size_t tStackCapacity>
549 for (
size_t n =
size; n < tStackCapacity; ++n)
554 if (
size_ > tStackCapacity)
556 if (
size < tStackCapacity)
570 if (
size > tStackCapacity)
579template <
typename T,
size_t tStackCapacity>
582 for (
size_t n = 0; n < std::min(
size, tStackCapacity); ++n)
587 for (
size_t n =
size; n < std::min(tStackCapacity,
size_); ++n)
592 if (
size < tStackCapacity)
598 const size_t newHeapSize =
size - tStackCapacity;
606template <
typename T,
size_t tStackCapacity>
614template <
typename T,
size_t tStackCapacity>
620template <
typename T,
size_t tStackCapacity>
626template <
typename T,
size_t tStackCapacity>
629 for (
size_t nStack = 0; nStack < std::min(
size_, tStackCapacity); ++nStack)
639template <
typename T,
size_t tStackCapacity>
651template <
typename T,
size_t tStackCapacity>
659template <
typename T,
size_t tStackCapacity>
667template <
typename T,
size_t tStackCapacity>
672 if (
size_ <= tStackCapacity)
682template <
typename T,
size_t tStackCapacity>
687 if (
size_ <= tStackCapacity)
697template <
typename T,
size_t tStackCapacity>
703template <
typename T,
size_t tStackCapacity>
709template <
typename T,
size_t tStackCapacity>
715template <
typename T,
size_t tStackCapacity>
721template <
typename T,
size_t tStackCapacity>
724 ocean_assert(index <
size());
726 if (index < tStackCapacity)
734template <
typename T,
size_t tStackCapacity>
737 ocean_assert(index <
size());
739 if (index < tStackCapacity)
Definition of an iterator allowing to iterate through the vector.
Definition StackHeapVector.h:95
const StackHeapVector & vector_
The vector owning this iterator.
Definition StackHeapVector.h:142
ConstIterator(const StackHeapVector &vector, const size_t index)
Creates a new iterator pointing to a specified elements in the vector.
Definition StackHeapVector.h:375
bool operator==(const ConstIterator &iterator) const
Compares two iterators and returns whether both iterators point to the same vector element.
Definition StackHeapVector.h:407
size_t index_
The index of the element within the vector to which the iterator points.
Definition StackHeapVector.h:145
bool operator!=(const ConstIterator &iterator) const
Compares two iterators and returns whether both iterators do not point to the same vector element.
Definition StackHeapVector.h:415
const T & operator*() const
De-references the iterator and provides access to the underlying element in the vector.
Definition StackHeapVector.h:401
ConstIterator & operator++()
(Pre-) increments this iterator.
Definition StackHeapVector.h:383
Definition of an iterator allowing to iterate through the vector.
Definition StackHeapVector.h:37
size_t index_
The index of the element within the vector to which the iterator points.
Definition StackHeapVector.h:87
bool operator==(const Iterator &iterator) const
Compares two iterators and returns whether both iterators point to the same vector element.
Definition StackHeapVector.h:361
bool operator!=(const Iterator &iterator) const
Compares two iterators and returns whether both iterators do not point to the same vector element.
Definition StackHeapVector.h:369
Iterator(StackHeapVector &vector, const size_t index)
Creates a new iterator pointing to a specified elements in the vector.
Definition StackHeapVector.h:329
StackHeapVector & vector_
The vector owning this iterator.
Definition StackHeapVector.h:84
T & operator*()
De-references the iterator and provides access to the underlying element in the vector.
Definition StackHeapVector.h:355
Iterator & operator++()
(Pre-) increments this iterator.
Definition StackHeapVector.h:337
Vector like data structure combining stack and heap memory.
Definition StackHeapVector.h:27
size_t size_
The number of elements in this vector.
Definition StackHeapVector.h:325
StackHeapVector(const size_t size, const T &element)
Creates a new vector object.
Definition StackHeapVector.h:427
StackHeapVector(const std::vector< T > &elements)
Creates a new vector object and copies the elements to this vector.
Definition StackHeapVector.h:449
Iterator begin()
Returns an iterator to the first element in this vector.
Definition StackHeapVector.h:698
std::vector< T > heapElements_
The remaining elements located on the heap.
Definition StackHeapVector.h:322
StackHeapVector()
Creates a new vector object.
Definition StackHeapVector.h:421
StackHeapVector(const std::initializer_list< T > elements)
Creates a new vector object and copies the elements to this vector.
Definition StackHeapVector.h:460
const T & operator[](const size_t index) const
Elements access operator.
Definition StackHeapVector.h:722
T stackElements_[tStackCapacity]
The elements located on the stack.
Definition StackHeapVector.h:319
void assign(const size_t size, const T &element)
Replaces the content of the vector with 'size' copies of the provided element.
Definition StackHeapVector.h:580
const T & back() const
Returns the last element of this vector.
Definition StackHeapVector.h:668
T & emplaceBack(TArgs &&... args)
Emplaces a new element to the end of this vector.
Definition StackHeapVector.h:502
Iterator end()
Returns an iterator to the element following the last element in this vector.
Definition StackHeapVector.h:704
size_t capacity() const
Returns the overall capacity of this vector (including the capacity on the stack and on the heap).
Definition StackHeapVector.h:615
void reserve(const size_t capacity)
Reserves a specified capacity for this vector.
Definition StackHeapVector.h:640
const T & front() const
Returns the first element of this vector.
Definition StackHeapVector.h:652
void pushBack(T &&element)
Pushes a new element to the end of this vector.
Definition StackHeapVector.h:471
void resize(const size_t size)
Resizes the vector.
Definition StackHeapVector.h:538
ConstIterator begin() const
Returns a const iterator to the first element in this vector.
Definition StackHeapVector.h:710
T & operator[](const size_t index)
Elements access operator.
Definition StackHeapVector.h:735
void clear()
Clears this vector.
Definition StackHeapVector.h:627
T & back()
Returns the last element of this vector.
Definition StackHeapVector.h:683
T & front()
Returns the first element of this vector.
Definition StackHeapVector.h:660
StackHeapVector(std::vector< T > &&elements)
Creates a new vector object and moves the elements to this vector.
Definition StackHeapVector.h:438
ConstIterator end() const
Returns an iterator to the element following the last element in this vector.
Definition StackHeapVector.h:716
void pushBack(const T &element)
Pushes a new element to the end of this vector.
Definition StackHeapVector.h:486
bool isEmpty() const
Returns whether this vector is empty.
Definition StackHeapVector.h:621
void popBack()
Removed the last elements from the vector.
Definition StackHeapVector.h:521
size_t size() const
Returns the number of elements of this vector.
Definition StackHeapVector.h:607
The namespace covering the entire Ocean framework.
Definition Accessor.h:15