xref: /aosp_15_r20/external/marisa-trie/lib/marisa/grimoire/trie/header.h (revision ab8db090fce404b23716c4c9194221ee27efe31c)
1*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_GRIMOIRE_TRIE_HEADER_H_
2*ab8db090SAndroid Build Coastguard Worker #define MARISA_GRIMOIRE_TRIE_HEADER_H_
3*ab8db090SAndroid Build Coastguard Worker 
4*ab8db090SAndroid Build Coastguard Worker #include "marisa/grimoire/io.h"
5*ab8db090SAndroid Build Coastguard Worker 
6*ab8db090SAndroid Build Coastguard Worker namespace marisa {
7*ab8db090SAndroid Build Coastguard Worker namespace grimoire {
8*ab8db090SAndroid Build Coastguard Worker namespace trie {
9*ab8db090SAndroid Build Coastguard Worker 
10*ab8db090SAndroid Build Coastguard Worker class Header {
11*ab8db090SAndroid Build Coastguard Worker  public:
12*ab8db090SAndroid Build Coastguard Worker   enum {
13*ab8db090SAndroid Build Coastguard Worker     HEADER_SIZE = 16
14*ab8db090SAndroid Build Coastguard Worker   };
15*ab8db090SAndroid Build Coastguard Worker 
Header()16*ab8db090SAndroid Build Coastguard Worker   Header() {}
17*ab8db090SAndroid Build Coastguard Worker 
map(Mapper & mapper)18*ab8db090SAndroid Build Coastguard Worker   void map(Mapper &mapper) {
19*ab8db090SAndroid Build Coastguard Worker     const char *ptr;
20*ab8db090SAndroid Build Coastguard Worker     mapper.map(&ptr, HEADER_SIZE);
21*ab8db090SAndroid Build Coastguard Worker     MARISA_THROW_IF(!test_header(ptr), MARISA_FORMAT_ERROR);
22*ab8db090SAndroid Build Coastguard Worker   }
read(Reader & reader)23*ab8db090SAndroid Build Coastguard Worker   void read(Reader &reader) {
24*ab8db090SAndroid Build Coastguard Worker     char buf[HEADER_SIZE];
25*ab8db090SAndroid Build Coastguard Worker     reader.read(buf, HEADER_SIZE);
26*ab8db090SAndroid Build Coastguard Worker     MARISA_THROW_IF(!test_header(buf), MARISA_FORMAT_ERROR);
27*ab8db090SAndroid Build Coastguard Worker   }
write(Writer & writer)28*ab8db090SAndroid Build Coastguard Worker   void write(Writer &writer) const {
29*ab8db090SAndroid Build Coastguard Worker     writer.write(get_header(), HEADER_SIZE);
30*ab8db090SAndroid Build Coastguard Worker   }
31*ab8db090SAndroid Build Coastguard Worker 
io_size()32*ab8db090SAndroid Build Coastguard Worker   std::size_t io_size() const {
33*ab8db090SAndroid Build Coastguard Worker     return HEADER_SIZE;
34*ab8db090SAndroid Build Coastguard Worker   }
35*ab8db090SAndroid Build Coastguard Worker 
36*ab8db090SAndroid Build Coastguard Worker  private:
37*ab8db090SAndroid Build Coastguard Worker 
get_header()38*ab8db090SAndroid Build Coastguard Worker   static const char *get_header() {
39*ab8db090SAndroid Build Coastguard Worker     static const char buf[HEADER_SIZE] = "We love Marisa.";
40*ab8db090SAndroid Build Coastguard Worker     return buf;
41*ab8db090SAndroid Build Coastguard Worker   }
42*ab8db090SAndroid Build Coastguard Worker 
test_header(const char * ptr)43*ab8db090SAndroid Build Coastguard Worker   static bool test_header(const char *ptr) {
44*ab8db090SAndroid Build Coastguard Worker     for (std::size_t i = 0; i < HEADER_SIZE; ++i) {
45*ab8db090SAndroid Build Coastguard Worker       if (ptr[i] != get_header()[i]) {
46*ab8db090SAndroid Build Coastguard Worker         return false;
47*ab8db090SAndroid Build Coastguard Worker       }
48*ab8db090SAndroid Build Coastguard Worker     }
49*ab8db090SAndroid Build Coastguard Worker     return true;
50*ab8db090SAndroid Build Coastguard Worker   }
51*ab8db090SAndroid Build Coastguard Worker 
52*ab8db090SAndroid Build Coastguard Worker   // Disallows copy and assignment.
53*ab8db090SAndroid Build Coastguard Worker   Header(const Header &);
54*ab8db090SAndroid Build Coastguard Worker   Header &operator=(const Header &);
55*ab8db090SAndroid Build Coastguard Worker };
56*ab8db090SAndroid Build Coastguard Worker 
57*ab8db090SAndroid Build Coastguard Worker }  // namespace trie
58*ab8db090SAndroid Build Coastguard Worker }  // namespace marisa
59*ab8db090SAndroid Build Coastguard Worker }  // namespace grimoire
60*ab8db090SAndroid Build Coastguard Worker 
61*ab8db090SAndroid Build Coastguard Worker #endif  // MARISA_GRIMOIRE_TRIE_HEADER_H_
62