17 #ifndef IOX_HOOFS_CXX_VECTOR_HPP
18 #define IOX_HOOFS_CXX_VECTOR_HPP
20 #include "iceoryx_hoofs/cxx/requires.hpp"
37 template <
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;
206 template <typename T, uint64_t CapacityLeft, uint64_t CapacityRight>
207 bool operator==(const
iox::cxx::
vector<T, CapacityLeft>& lhs, const
iox::cxx::
vector<T, CapacityRight>& rhs) noexcept;
209 template <typename T, uint64_t CapacityLeft, uint64_t CapacityRight>
210 bool 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 & at(const uint64_t index) noexcept
returns a reference to the element stored at index. the behavior
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...
T & back() noexcept
returns a reference to the last element; terminates if the vector is empty
iterator erase(iterator position) noexcept
removes an element at the given position. if this element is in the middle of the vector every elemen...
T & front() noexcept
returns a reference to the first element; terminates if the vector is empty
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
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...
T * data() noexcept
return the pointer to the underlying array
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
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