From 2256c633d38dba3c961e048fd55c56f722311a9e Mon Sep 17 00:00:00 2001 From: cat Date: Mon, 9 Mar 2026 18:23:52 +0200 Subject: [PATCH] Switched to Corrade's arrays on MultiQueryResult@DualKey Map --- headers/Containers/DualkeyMap.hpp | 28 +++++++++++++++------------- headers/Containers/Hashmap.hpp | 4 ++-- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/headers/Containers/DualkeyMap.hpp b/headers/Containers/DualkeyMap.hpp index d708f5c..92582dc 100644 --- a/headers/Containers/DualkeyMap.hpp +++ b/headers/Containers/DualkeyMap.hpp @@ -13,6 +13,8 @@ #include "ContainerOptions.hpp" #include "Hashmap.hpp" +#include "Corrade/Containers/Array.h" + #include #include #include @@ -33,14 +35,14 @@ template + template requires Concepts::Either struct MultiQueryResult { // Having to use pointers here over references was not fun // but it was for greater good const OppositeKey *oppositeKey; + Corrade::Containers::Array valueQueryResults; std::size_t howManyFound = 1; - std::array valueQueryResults; }; using QueryResult = @@ -209,15 +211,14 @@ public: std::size_t keyCount> requires Concepts::Either [[nodiscard("Discarding a very expensive query!")]] - std::vector> + std::vector> QueryWithAll(const Key (&keys)[keyCount]) { - std::vector> queryResult = + std::vector> queryResult = queryWithMany(keys); - std::erase_if( - queryResult, - [](const MultiQueryResult &queryRecord) { - return queryRecord.howManyFound != keyCount; - }); + std::erase_if(queryResult, + [](const MultiQueryResult &queryRecord) { + return queryRecord.howManyFound != keyCount; + }); return queryResult; } @@ -271,7 +272,7 @@ private: template , std::size_t keyCount> - inline std::vector> + inline std::vector> queryWithMany(const Key (&keys)[keyCount]) { constexpr bool searchingInFirstKey = std::is_same_v; @@ -301,7 +302,7 @@ private: Key *keyToCompare; OppositeKey *oppositeKey; - Containers::Hashmap, + Containers::Hashmap, {8.0f, 0.01f, 2.5f, 2048, 8}> // Aggressive hashmap :o queryResults; @@ -334,8 +335,9 @@ private: } queryResults - .Insert(*oppositeKey, - MultiQueryResult(oppositeKey)) + .Insert( + *oppositeKey, + {oppositeKey, Corrade::Containers::Array{keyCount}}) .valueQueryResults[index] = &hash->value; } } diff --git a/headers/Containers/Hashmap.hpp b/headers/Containers/Hashmap.hpp index 349d67d..58b6229 100644 --- a/headers/Containers/Hashmap.hpp +++ b/headers/Containers/Hashmap.hpp @@ -160,8 +160,8 @@ private: // Repopulate and cleanup for (bucket &entry : oldStorage) { - for (const hashStorage &hash : entry) { - Insert(hash.key, hash.value); + for (hashStorage &hash : entry) { + Insert(std::move(hash.key), std::move(hash.value)); } entry.clear();