19template<
size_t MaxNameSize = 32,
size_t MaxEntries = 64>
28 std::array<char, MAX_NAME_SIZE>
name{};
38 size_t total_allocated{0};
53 bool add(
const char* name,
size_t offset,
size_t size,
54 size_t elem_size = 0,
size_t num_elem = 0)
61 if (!entries[i].active)
68 e.elem_size = elem_size;
69 e.num_elem = num_elem;
73 size_t end_offset = offset + size -
sizeof(*this);
74 total_allocated = std::max(total_allocated, end_offset);
82 bool add(std::string_view name,
size_t offset,
size_t size,
83 size_t elem_size = 0,
size_t num_elem = 0)
86 size_t copy_len = std::min(name.size(),
sizeof(name_buf) - 1);
87 std::copy_n(name.begin(), copy_len, name_buf);
88 return add(name_buf, offset, size, elem_size, num_elem);
95 if (entries[i].active &&
96 std::strcmp(name, entries[i].name.data()) == 0)
109 size_t copy_len = std::min(name.size(),
sizeof(name_buf) - 1);
110 std::copy_n(name.begin(), copy_len, name_buf);
111 return erase(name_buf);
122 if (entries[i].active &&
123 std::strcmp(name, entries[i].name.data()) == 0)
135 if (entries[i].active &&
136 std::strcmp(name, entries[i].name.data()) == 0)
147 size_t copy_len = std::min(name.size(),
sizeof(name_buf) - 1);
148 std::copy_n(name.begin(), copy_len, name_buf);
149 return find(name_buf);
155 size_t copy_len = std::min(name.size(),
sizeof(name_buf) - 1);
156 std::copy_n(name.begin(), copy_len, name_buf);
157 return find(name_buf);
165 return total_allocated;
176 if (entries[i].active)
189 entries[i].
active =
false;
Metadata table for managing shared memory data structures.
entry * find(std::string_view name)
bool add(std::string_view name, size_t offset, size_t size, size_t elem_size=0, size_t num_elem=0)
static constexpr size_t MAX_NAME_SIZE
entry * find(const char *name)
Find an entry by name.
static constexpr size_t MAX_ENTRIES
const entry * find(std::string_view name) const
bool erase(std::string_view name)
bool add(const char *name, size_t offset, size_t size, size_t elem_size=0, size_t num_elem=0)
Add a new entry to the table.
bool erase(const char *name)
static constexpr size_t size_bytes()
Get the actual size of this table in bytes.
size_t get_total_allocated_size() const
Get total allocated size (excluding the table itself)
size_t get_entry_count() const
Get number of active entries.
const entry * find(const char *name) const
void clear()
Clear all entries (for initialization)
std::array< char, MAX_NAME_SIZE > name