62 lines
1.2 KiB
C++
62 lines
1.2 KiB
C++
#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_
|