#ifndef MARISA_ALPHA_RANGE_H_
#define MARISA_ALPHA_RANGE_H_
#include "base.h"
namespace marisa_alpha {
class Range {
public:
Range() : begin_(0), end_(0), pos_(0) {}
Range(UInt32 begin, UInt32 end, UInt32 pos)
: begin_(begin), end_(end), pos_(pos) {}
void set_begin(UInt32 begin) {
begin_ = begin;
}
void set_end(UInt32 end) {
end_ = end;
}
void set_pos(UInt32 pos) {
pos_ = pos;
}
UInt32 begin() const {
return begin_;
}
UInt32 end() const {
return end_;
}
UInt32 pos() const {
return pos_;
}
private:
UInt32 begin_;
UInt32 end_;
UInt32 pos_;
};
class WRange {
public:
WRange() : range_(), weight_(0.0) {}
WRange(const Range &range, double weight)
: range_(range), weight_(weight) {}
WRange(UInt32 begin, UInt32 end, UInt32 pos, double weight)
: range_(begin, end, pos), weight_(weight) {}
void set_begin(UInt32 begin) {
range_.set_begin(begin);
}
void set_end(UInt32 end) {
range_.set_end(end);
}
void set_pos(UInt32 pos) {
range_.set_pos(pos);
}
void set_weight(double weight) {
weight_ = weight;
}
const Range &range() const {
return range_;
}
UInt32 begin() const {
return range_.begin();
}
UInt32 end() const {
return range_.end();
}
UInt32 pos() const {
return range_.pos();
}
double weight() const {
return weight_;
}
private:
Range range_;
double weight_;
};
inline bool operator>(const WRange &lhs, const WRange &rhs) {
return lhs.weight() > rhs.weight();
}
} // namespace marisa_alpha
#endif // MARISA_ALPHA_RANGE_H_