You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.2 KiB
62 lines
1.2 KiB
7 months ago
|
#ifndef MARISA_GRIMOIRE_TRIE_HEADER_H_
|
||
|
#define MARISA_GRIMOIRE_TRIE_HEADER_H_
|
||
|
|
||
|
#include "marisa/grimoire/io.h"
|
||
|
|
||
|
namespace marisa {
|
||
|
namespace grimoire {
|
||
|
namespace trie {
|
||
|
|
||
|
class Header {
|
||
|
public:
|
||
|
enum {
|
||
|
HEADER_SIZE = 16
|
||
|
};
|
||
|
|
||
|
Header() {}
|
||
|
|
||
|
void map(Mapper &mapper) {
|
||
|
const char *ptr;
|
||
|
mapper.map(&ptr, HEADER_SIZE);
|
||
|
MARISA_THROW_IF(!test_header(ptr), MARISA_FORMAT_ERROR);
|
||
|
}
|
||
|
void read(Reader &reader) {
|
||
|
char buf[HEADER_SIZE];
|
||
|
reader.read(buf, HEADER_SIZE);
|
||
|
MARISA_THROW_IF(!test_header(buf), MARISA_FORMAT_ERROR);
|
||
|
}
|
||
|
void write(Writer &writer) const {
|
||
|
writer.write(get_header(), HEADER_SIZE);
|
||
|
}
|
||
|
|
||
|
std::size_t io_size() const {
|
||
|
return HEADER_SIZE;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
|
||
|
static const char *get_header() {
|
||
|
static const char buf[HEADER_SIZE] = "We love Marisa.";
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
static bool test_header(const char *ptr) {
|
||
|
for (std::size_t i = 0; i < HEADER_SIZE; ++i) {
|
||
|
if (ptr[i] != get_header()[i]) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// Disallows copy and assignment.
|
||
|
Header(const Header &);
|
||
|
Header &operator=(const Header &);
|
||
|
};
|
||
|
|
||
|
} // namespace trie
|
||
|
} // namespace marisa
|
||
|
} // namespace grimoire
|
||
|
|
||
|
#endif // MARISA_GRIMOIRE_TRIE_HEADER_H_
|