diff options
| author | Quentin LADEVIE <qladevie@wanadev.fr> | 2023-01-22 17:59:24 +0100 |
|---|---|---|
| committer | Quentin LADEVIE <qladevie@wanadev.fr> | 2023-01-22 17:59:24 +0100 |
| commit | 0a882c4b85423a170455f05a52d18f7fa7c9220b (patch) | |
| tree | 3bdc24d73ba7cc828fce2b93ce85f73831b12204 /include/api-test/freelist.hpp | |
| parent | 5e3bb454d50091e581d5d1d03af34e38277694b3 (diff) | |
Api test bindless and command buffers
Diffstat (limited to 'include/api-test/freelist.hpp')
| -rw-r--r-- | include/api-test/freelist.hpp | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/include/api-test/freelist.hpp b/include/api-test/freelist.hpp index e5af6f5..9553a15 100644 --- a/include/api-test/freelist.hpp +++ b/include/api-test/freelist.hpp @@ -1,32 +1,57 @@ #include <numeric> #include <vector> -template<typename T, const size_t initial_size = 1024U> + +static constexpr uint32_t default_element_count = 1024U; + +template<typename T, const size_t initial_size = default_element_count> class freelist { public: freelist() - : holes(initial_size), + : free(initial_size), items(initial_size) { - std::iota(holes.begin(), holes.end(), 0); + std::iota(free.rbegin(), free.rend(), 0); } uint32_t add(const T& item) { - const auto id = holes.back(); - holes.pop_back(); + const auto id = free.back(); + free.pop_back(); - items[id] = std::move(item); + items[id] = item; return id; } void remove(uint32_t item_id) { - holes.push_back(item_id); + free.push_back(item_id); } - const T& operator[](uint32_t index) { + T& operator[](uint32_t index) { return items[index]; } + uint32_t find(const T& seeked_item) { + for (auto index { 0U }; index < items.size(); index++) { + const auto& item = items[index]; + if (memcmp(&item, &seeked_item, sizeof(T)) == 0) { + return index; + } + } + + return invalid_handle; + } + + auto begin() { + return items.begin(); + } + + auto end() { + return items.end(); + } + + static constexpr uint32_t invalid_handle = -1; + +private: std::vector<T> items; - std::vector<uint32_t> holes; + std::vector<uint32_t> free; }; |
