72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
#ifndef MARISA_TAIL_H_
|
|
#define MARISA_TAIL_H_
|
|
|
|
#include "marisa-string.h"
|
|
#include "vector.h"
|
|
|
|
namespace marisa {
|
|
|
|
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_DEBUG_IF(offset >= buf_.size(), MARISA_PARAM_ERROR);
|
|
return &buf_[offset];
|
|
}
|
|
|
|
int mode() const {
|
|
return (buf_.front() == '\0') ? MARISA_BINARY_TAIL : MARISA_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
|
|
|
|
#endif // MARISA_TAIL_H_
|