Project: finder, src: NGram.h
N-Gram クラスの定義
#ifndef NGRAM_H_
#define NGRAM_H_
#if defined(NO_HASH_FUNC)
#include "hash.h"
#else
#include <functional>
#endif
#include "ucs4.h"
#include "Serializer.h"
#define NGRAM_SIZE (2)
/**
* N-gram をキーとするクラス
*/
class NGram : public Serializer {
private:
UCS4 key[NGRAM_SIZE];
public:
NGram() {
key[0] = 0;
key[1] = 0;
}
NGram(UCS4 *ucs4) {
for (int i = 0; i < NGRAM_SIZE; ++i) {
key[i] = ucs4[i];
}
}
void writeObject(int fd) const;
void readObject(int fd);
bool operator == (const NGram &ngram) const {
for (int i = 0; i < NGRAM_SIZE; ++i) {
if (key[i] != ngram.key[i]) return false;
}
return true;
}
bool operator < (const NGram &ngram) const {
for (int i = 0; i < NGRAM_SIZE; ++i) {
if (key[i] < ngram.key[i]) return true;
if (ngram.key[i] < key[i]) return false;
}
return false;
}
std::size_t operator()(const NGram &ngram) const {
std::size_t r = 0;
for (int i = 0; i < NGRAM_SIZE; ++i) {
r ^= std::hash<UCS4>()(ngram.key[i]);
}
return r;
}
};
#endif // NGRAM_H_