Wordsearch Solver
empty_node_view.hpp
1 #ifndef EMPTY_NODE_VIEW_HPP
2 #define EMPTY_NODE_VIEW_HPP
3 
4 #include "wordsearch_solver/compact_trie2/compact_trie2_iterator_typedefs.hpp"
5 
6 #include <cassert>
7 #include <cstdint>
8 #include <ostream>
9 #include <vector>
10 
11 namespace compact_trie2 {
12 
15 template <class Iterator> class EmptyNodeView_ {
16 public:
17  // Unsure if constexpr makes any difference to member functions here
18  constexpr explicit EmptyNodeView_(Iterator it) : it_(it) { assert(*it == 0); }
19 
21  constexpr auto base() const { return it_; }
22 
24  constexpr std::size_t size() const { return 1; }
25 
27  constexpr bool is_only_end_of_word() const { return true; }
28 
31  constexpr std::uint8_t data_size() const {
32  // gcc complains that the iterator's operator* here isn't constexpr
33  // clang doesn't
34  // assert(*it_ == 0);
35  return 0;
36  }
37 
39  constexpr bool is_end_of_word() const { return true; }
40 
41  friend std::ostream& operator<<(std::ostream& os, const EmptyNodeView_&) {
42  return os << "EmptyNode";
43  }
44 
45  Iterator it_;
46 };
47 
48 using EmptyNodeViewMut = EmptyNodeView_<DataIteratorMut>;
49 using EmptyNodeView = EmptyNodeView_<DataIterator>;
50 
51 } // namespace compact_trie2
52 
53 #endif // EMPTY_NODE_VIEW_HPP
An empty node is simply a single std::uint8_t (byte) with value 0.
Definition: empty_node_view.hpp:15
constexpr std::size_t size() const
Definition: empty_node_view.hpp:24
constexpr bool is_only_end_of_word() const
Definition: empty_node_view.hpp:27
constexpr bool is_end_of_word() const
Definition: empty_node_view.hpp:39
constexpr auto base() const
Definition: empty_node_view.hpp:21
constexpr std::uint8_t data_size() const
Definition: empty_node_view.hpp:31
namespace compact_trie2
Definition: compact_trie2.hpp:19