Wordsearch Solver
dictionary_std_vector.hpp
1 #ifndef DICTIONARY_STD_VECTOR_HPP
2 #define DICTIONARY_STD_VECTOR_HPP
3 
4 #include <cstddef>
5 #include <initializer_list>
6 #include <ostream>
7 #include <string>
8 #include <string_view>
9 #include <vector>
10 
13 
26 public:
27  DictionaryStdVector() = default;
28  // DictionaryStdVector(const std::vector<std::string>& dict);
29 
31  DictionaryStdVector& operator=(DictionaryStdVector&&) = default;
32 
34  DictionaryStdVector& operator=(const DictionaryStdVector&) = delete;
35 
36  DictionaryStdVector(const std::initializer_list<std::string_view>& words);
37  DictionaryStdVector(const std::initializer_list<std::string>& words);
38  DictionaryStdVector(const std::initializer_list<const char*>& words);
39 
41  template <class Iterator1, class Iterator2>
42  DictionaryStdVector(Iterator1 first, const Iterator2 last);
43 
44  // TODO: awful SFINAE or wait until 2030 for widespread cpp20 concepts to
45  // constrain this to a ForwardRange
46  template <class ForwardRange>
47  explicit DictionaryStdVector(const ForwardRange& words);
48 
49  std::size_t size() const;
50  bool empty() const;
51 
53  template <class OutputIndexIterator>
54  void contains_further(const std::string_view stem,
55  const std::string_view suffixes,
56  OutputIndexIterator contains_further_it) const;
57 
59  bool contains(const std::string_view word) const;
61  bool further(const std::string_view word) const;
62 
63  friend std::ostream& operator<<(std::ostream&, const DictionaryStdVector&);
64 
65 private:
66  using Iterator = std::vector<std::string>::const_iterator;
67  bool further_impl(const std::string_view key, Iterator first,
68  Iterator last) const;
69 
70  std::vector<std::string> dict_;
71 };
72 
73 } // namespace dictionary_std_vector
74 
75 #include "wordsearch_solver/dictionary_std_vector/dictionary_std_vector.tpp"
76 
77 #endif // DICTIONARY_STD_VECTOR_HPP
Solver implementation using a sorted std::vector.
Definition: dictionary_std_vector.hpp:25
bool further(const std::string_view word) const
Check if this dictionary might contain words with word as a prefix.
Definition: dictionary_std_vector.cpp:44
bool contains(const std::string_view word) const
Check if this dictionary contains word.
Definition: dictionary_std_vector.cpp:40
void contains_further(const std::string_view stem, const std::string_view suffixes, OutputIndexIterator contains_further_it) const
For each char in suffix appended to stem, check whether this dictionary contains this word and if it ...
Definition: dictionary_std_vector.tpp:58
namespace dictionary_std_vector
Definition: dictionary_std_vector.hpp:12