Flex  0.17.9
encoders_view.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_PTHASH_UTILS_ENCODERS_VIEW_VIEW_H_
17 #define GRAPHSCOPE_PTHASH_UTILS_ENCODERS_VIEW_VIEW_H_
18 
19 #ifdef USE_PTHASH
21 
22 namespace gs {
23 
24 // This code is an adaptation from
25 // https://github.com/jermp/pthash/blob/master/include/encoders/encoders.hpp
26 struct dictionary_view {
27  size_t size() const { return m_ranks.size(); }
28  uint64_t access(uint64_t i) const {
29  uint64_t rank = m_ranks.access(i);
30  return m_dict.access(rank);
31  }
32 
33  template <typename Visitor>
34  void visit(Visitor& visitor) {
35  visitor.visit(m_ranks);
36  visitor.visit(m_dict);
37  }
38 
39  compact_vector_view m_ranks;
40  compact_vector_view m_dict;
41 };
42 
43 struct dual_dictionary_view {
44  uint64_t access(uint64_t i) const {
45  if (i < m_front.size()) {
46  return m_front.access(i);
47  }
48  return m_back.access(i - m_front.size());
49  }
50 
51  template <typename Visitor>
52  void visit(Visitor& visitor) {
53  visitor.visit(m_front);
54  visitor.visit(m_back);
55  }
56 
57  dictionary_view m_front;
58  dictionary_view m_back;
59 };
60 
61 } // namespace gs
62 
63 #endif // USE_PTHASH
64 
65 #endif // GRAPHSCOPE_PTHASH_UTILS_ENCODERS_VIEW_VIEW_H_
gs
Definition: adj_list.h:23
ef_sequence_view.h