blob: c7b323575f842576932e66bfc42d8668773b9c5d [file] [log] [blame]
#ifndef MARISA_ALPHA_TAIL_H_
#define MARISA_ALPHA_TAIL_H_
#include "string.h"
#include "vector.h"
namespace marisa_alpha {
class Tail {
public:
Tail();
void build(const Vector<String> &keys,
Vector<UInt32> *offsets, int mode);
void mmap(Mapper *mapper, const char *filename,
long offset = 0, int whence = SEEK_SET);
void map(const void *ptr, std::size_t size);
void map(Mapper &mapper);
void load(const char *filename,
long offset = 0, int whence = SEEK_SET);
void fread(::FILE *file);
void read(int fd);
void read(std::istream &stream);
void read(Reader &reader);
void save(const char *filename, bool trunc_flag = true,
long offset = 0, int whence = SEEK_SET) const;
void fwrite(::FILE *file) const;
void write(int fd) const;
void write(std::ostream &stream) const;
void write(Writer &writer) const;
const UInt8 *operator[](std::size_t offset) const {
MARISA_ALPHA_DEBUG_IF(offset >= buf_.size(), MARISA_ALPHA_PARAM_ERROR);
return &buf_[offset];
}
int mode() const {
return (buf_.front() == '\0') ?
MARISA_ALPHA_BINARY_TAIL : MARISA_ALPHA_TEXT_TAIL;
}
bool empty() const {
return buf_.empty();
}
std::size_t size() const {
return buf_.size();
}
std::size_t total_size() const {
return buf_.total_size();
}
void clear();
void swap(Tail *rhs);
private:
Vector<UInt8> buf_;
void build_binary_tail(const Vector<String> &keys,
Vector<UInt32> *offsets);
bool build_text_tail(const Vector<String> &keys,
Vector<UInt32> *offsets);
void build_empty_tail(Vector<UInt32> *offsets);
// Disallows copy and assignment.
Tail(const Tail &);
Tail &operator=(const Tail &);
};
} // namespace marisa_alpha
#endif // MARISA_ALPHA_TAIL_H_