17#ifndef IOX_HOOFS_CXX_VECTOR_HPP
18#define IOX_HOOFS_CXX_VECTOR_HPP
20#include "iceoryx_hoofs/cxx/requires.hpp"
37template <
typename T, u
int64_t Capacity>
44 using const_iterator =
const T*;
52 vector(const uint64_t count, const T& value) noexcept;
56 vector(const uint64_t count) noexcept;
86 const_iterator
begin() const noexcept;
90 iterator
end() noexcept;
94 const_iterator
end() const noexcept;
102 const T*
data() const noexcept;
107 T&
at(const uint64_t index) noexcept;
112 const T&
at(const uint64_t index) const noexcept;
117 T& operator[](const uint64_t index) noexcept;
122 const T& operator[](const uint64_t index) const noexcept;
142 const T&
back() const noexcept;
150 uint64_t
size() const noexcept;
167 template <typename... Targs>
168 bool resize(const uint64_t count, const Targs&... args) noexcept;
173 template <typename... Targs>
174 bool emplace(const uint64_t position, Targs&&... args) noexcept;
178 template <typename... Targs>
196 iterator
erase(iterator position) noexcept;
199 using element_t = uint8_t[sizeof(T)];
200 alignas(T) element_t m_data[Capacity];
201 uint64_t m_size = 0u;
206template <typename T, uint64_t CapacityLeft, uint64_t CapacityRight>
207bool operator==(const
iox::cxx::
vector<T, CapacityLeft>& lhs, const
iox::cxx::
vector<T, CapacityRight>& rhs) noexcept;
209template <typename T, uint64_t CapacityLeft, uint64_t CapacityRight>
210bool operator!=(const
iox::cxx::
vector<T, CapacityLeft>& lhs, const
iox::cxx::
vector<T, CapacityRight>& rhs) noexcept;
212#include "iceoryx_hoofs/internal/cxx/vector.inl"
C++11 compatible vector implementation. We needed to do some adjustments in the API since we do not u...
Definition vector.hpp:39
bool push_back(const T &value) noexcept
appends the given element at the end of the vector
T & front() noexcept
returns a reference to the first element; terminates if the vector is empty
T * data() noexcept
return the pointer to the underlying array
void clear() noexcept
calls the destructor of all contained elements and removes them
bool emplace_back(Targs &&... args) noexcept
forwards all arguments to the constructor of the contained element and performs a placement new at th...
iterator erase(iterator position) noexcept
removes an element at the given position. if this element is in the middle of the vector every elemen...
bool pop_back() noexcept
removes the last element of the vector; calling pop_back on an empty container does nothing
vector() noexcept=default
creates an empty vector
T & at(const uint64_t index) noexcept
returns a reference to the element stored at index. the behavior
bool resize(const uint64_t count, const Targs &... args) noexcept
resizes the vector. If the vector size increases new elements will be constructed with the given argu...
uint64_t size() const noexcept
returns the number of elements which are currently stored in the vector
bool emplace(const uint64_t position, Targs &&... args) noexcept
forwards all arguments to the constructor of the contained element and performs a placement new at th...
uint64_t capacity() const noexcept
returns the capacity of the vector which was given via the template argument
T & back() noexcept
returns a reference to the last element; terminates if the vector is empty
iterator begin() noexcept
returns an iterator to the first element of the vector, if the vector is empty it returns the same it...
iterator end() noexcept
returns an iterator to the element which comes after the last element (the first element which is out...
bool empty() const noexcept
returns true if the vector is emtpy, otherwise false
building block to easily create free function for logging in a library context
Definition lockfree_queue.hpp:29