From d7278251ecb1728703b7e067c784b9077265cd84 Mon Sep 17 00:00:00 2001 From: Syed Daanish Date: Sun, 23 Aug 2026 16:01:27 +0100 Subject: [PATCH] Update trie to return better results for search. --- include/internal/trie/trie.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/include/internal/trie/trie.h b/include/internal/trie/trie.h index a91e7c2..5ded2f2 100644 --- a/include/internal/trie/trie.h +++ b/include/internal/trie/trie.h @@ -6,6 +6,10 @@ namespace bed::internal::trie { template struct Trie { using V = std::conditional_t, std::monostate, T>; + using SearchResult = std::conditional_t< + std::is_void_v, + std::string, + std::pair>; struct Node { std::string edge; @@ -113,8 +117,8 @@ struct Trie { return true; } - std::vector search(std::string_view prefix) { - std::vector result; + std::vector search(std::string_view prefix) { + std::vector result; Node *current = &root; std::string key; uint64_t pos = 0; @@ -145,10 +149,15 @@ struct Trie { static void collect( const Node &node, std::string &key, - std::vector &result + std::vector &result ) { - if (node.value) - result.push_back(key); + if (node.value) { + if constexpr (std::is_void_v) { + result.push_back(key); + } else { + result.emplace_back(key, *node.value); + } + } for (auto *child : node.children) { const auto old_size = key.size(); key += child->edge;