1 #ifndef COMPACT_TRIE_HPP
2 #define COMPACT_TRIE_HPP
4 #include "wordsearch_solver/compact_trie/node.hpp"
7 #include <fmt/format.h>
8 #include <fmt/ostream.h>
9 #include <fmt/ranges.h>
11 #include <range/v3/view/subrange.hpp>
15 #include <initializer_list>
19 #include <string_view>
21 #include <type_traits>
73 using Nodes = std::vector<Node>;
74 using NodesIterator = std::vector<Node>::const_iterator;
75 using Rows = std::vector<NodesIterator>;
76 using RowsIterator = Rows::const_iterator;
77 using const_iterator = std::tuple<NodesIterator, RowsIterator>;
88 CompactTrie(
const std::initializer_list<std::string_view>& words);
89 CompactTrie(
const std::initializer_list<std::string>& words);
90 CompactTrie(
const std::initializer_list<const char*>& words);
92 template <
class Iterator1,
class Iterator2>
96 template <
class Strings>
explicit CompactTrie(Strings&& strings_in);
99 bool contains(std::string_view word)
const;
101 bool further(std::string_view word)
const;
104 template <
class OutputIterator>
106 OutputIterator contains_further_it)
const;
108 std::size_t size()
const;
111 friend std::ostream& operator<<(std::ostream& os,
const CompactTrie& ct);
114 bool contains(std::string_view word, ranges::subrange<NodesIterator> nodes,
115 ranges::subrange<RowsIterator> rows)
const;
117 bool further(std::string_view word, ranges::subrange<NodesIterator> nodes,
118 ranges::subrange<RowsIterator> rows)
const;
132 CompactTrie::const_iterator
133 search(std::string_view word,
134 ranges::subrange<CompactTrie::NodesIterator> nodes,
135 ranges::subrange<CompactTrie::RowsIterator> rows)
const;
144 #include "wordsearch_solver/compact_trie/compact_trie.tpp"
Inline contiguous immutable trie.
Definition: compact_trie.hpp:71
bool contains(std::string_view word) const
Check if this dictionary contains word.
Definition: compact_trie.cpp:56
CompactTrie::const_iterator search(std::string_view word, ranges::subrange< CompactTrie::NodesIterator > nodes, ranges::subrange< CompactTrie::RowsIterator > rows) const
Search as far as possible for word.
Definition: compact_trie.cpp:133
void contains_further(std::string_view stem, std::string_view suffixes, OutputIterator contains_further_it) const
For each char in suffix appended to stem, check whether this dictionary contains this word and if it ...
Definition: compact_trie.tpp:70
bool further(std::string_view word) const
Check if this dictionary might contain words with word as a prefix.
Definition: compact_trie.cpp:72
namespace compact_trie
Definition: compact_trie.hpp:38