#ifndef MARISA_RANGE_H_ #define MARISA_RANGE_H_ #include "base.h" namespace marisa { 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 #endif // MARISA_RANGE_H_