From c3aac9026951e2a6e35e76b9c7d36e114a281453 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Tue, 5 May 2026 00:43:54 +0200 Subject: Remove old api and move api-test content to src and include dirs --- include/api-test/freelist.hpp | 151 ------------------------------------------ 1 file changed, 151 deletions(-) delete mode 100644 include/api-test/freelist.hpp (limited to 'include/api-test/freelist.hpp') diff --git a/include/api-test/freelist.hpp b/include/api-test/freelist.hpp deleted file mode 100644 index cbcd56d..0000000 --- a/include/api-test/freelist.hpp +++ /dev/null @@ -1,151 +0,0 @@ -#pragma once -#include -#include - -#include "handle.hpp" - -static constexpr uint32_t default_element_count = 1024U; - -template -class freelist { - public: - - freelist() { - grow(initial_size); - } - - handle add(const T& item) { - // auto id = elements[0U].next_free; - auto id = next_free_id; - - if (id == freelist::invalid_id) { - grow(elements.size()); - - // id = elements[0U].next_free; - id = next_free_id; - } - - auto& element = elements[id]; - - next_free_id = element.next_free; - // elements[0U].next_free = element.next_free; - element.item = std::move(item); - - return { id, ++element.generation }; - } - - void remove(handle handle) { - assert(handle.generation == elements[handle.id].generation); - // elements[handle.id].next_free = elements[0U].next_free; - // elements[0U].next_free = handle.id; - elements[handle.id].next_free = next_free_id; - next_free_id = handle.id; - } - - T& operator[](handle handle) { - assert(handle.generation == elements[handle.id].generation); - return elements[handle.id].item; - } - - const T& operator[](handle handle) const { - assert(handle.generation == elements[handle.id].generation); - return elements[handle.id].item; - } - - static constexpr uint32_t invalid_id = UINT32_MAX; - -private: - void grow(size_t grow_size) { - auto size = elements.size(); - uint32_t next_free = static_cast(size); - next_free_id = next_free; - - elements.reserve(size + grow_size); - - for (auto id { 0U }; id < initial_size; id++) { - elements.push_back( - { - .next_free = static_cast(++next_free % initial_size), - } - ); - } - - elements.back().next_free = freelist::invalid_id; - } - - struct element { - union { - T item; - uint32_t next_free = freelist::invalid_id; - }; - uint32_t generation = 0U; - }; - - std::vector elements; - uint32_t next_free_id; -}; - -template -class idlist { - public: - - idlist() { - grow(initial_size); - } - - handle add() { - // auto id = elements[0U].next_free; - auto id = next_free_id; - - if (id == idlist::invalid_id) { - grow(elements.size()); - - // id = elements[0U].next_free; - id = next_free_id; - } - - auto& element = elements[id]; - next_free_id = element.next_free; - elements[0U].next_free = element.next_free; - element.next_free = idlist::invalid_id; - - return { id, ++element.generation }; - } - - void remove(handle handle) { - assert(handle.generation == elements[handle.id].generation); - // elements[handle.id].next_free = elements[0U].next_free; - // elements[0U].next_free = handle.id; - elements[handle.id].next_free = next_free_id; - next_free_id = handle.id; - } - - static constexpr uint32_t invalid_id = UINT32_MAX; - -private: - void grow(size_t grow_size) { - auto size = elements.size(); - uint32_t next_free = static_cast(size); - next_free_id = next_free; - - elements.reserve(size + grow_size); - - for (auto id { 0U }; id < initial_size; id++) { - elements.push_back( - { - .next_free = static_cast(++next_free% initial_size), - } - ); - } - - elements.back().next_free = idlist::invalid_id; - } - - struct element { - uint32_t next_free = idlist::invalid_id; - uint32_t generation = 0U; - }; - - std::vector elements; - uint32_t next_free_id; -}; -- cgit v1.3