16 #ifndef IOX_POSH_ROUDI_INTROSPECTION_FIXED_SIZE_CONTAINER_HPP
17 #define IOX_POSH_ROUDI_INTROSPECTION_FIXED_SIZE_CONTAINER_HPP
19 #include "iceoryx_utils/cxx/vector.hpp"
37 template <
typename T, u
int32_t capacity = 1U>
41 using Index_t = int32_t;
42 using Capacity_t = decltype(capacity);
43 static constexpr int32_t NOT_AN_ELEMENT = -1;
53 Index_t
add(
const T& element)
55 auto nextElement = nextFree();
59 m_freeIndex = nextElement;
60 m_values[
static_cast<Capacity_t
>(m_freeIndex)].value = element;
61 m_values[
static_cast<Capacity_t
>(m_freeIndex)].isValid =
true;
68 void remove(Index_t index)
70 if (m_values[
static_cast<Capacity_t
>(index)].isValid)
72 m_values[
static_cast<Capacity_t
>(index)].isValid =
false;
81 return m_values[
static_cast<Capacity_t
>(index)].value;
86 return (m_values[
static_cast<Capacity_t
>(index)].isValid) ? &m_values[
static_cast<uint32_t
>(index)].value
98 if (m_size >= capacity)
99 return NOT_AN_ELEMENT;
101 for (; m_values[
static_cast<Capacity_t
>(m_freeIndex)].isValid;
102 m_freeIndex = (m_freeIndex + 1) %
static_cast<Index_t
>(capacity))
108 void setValid(Index_t index,
bool value =
true)
110 m_values[
static_cast<Capacity_t
>(index)].isValid = value;
113 void setInvalid(Index_t index)
115 setValid(index,
false);
118 Index_t m_freeIndex{0};
124 bool isValid =
false;
127 iox::cxx::vector<entry_t, capacity> m_values;
Definition: fixed_size_container.hpp:39
Index_t add(const T &element)
Definition: fixed_size_container.hpp:53
T & operator[](Index_t index)
Definition: fixed_size_container.hpp:79
Definition: service_description.hpp:29