1 #ifndef MARISA_KEY_H_ 2 #define MARISA_KEY_H_ 3 4 namespace marisa { 5 6 template <typename T> 7 class Key { 8 public: Key()9 Key() : str_(), weight_(0.0), id_(0), terminal_(0) {} 10 set_str(const T & str)11 void set_str(const T &str) { 12 str_ = str; 13 } set_weight(double weight)14 void set_weight(double weight) { 15 weight_ = weight; 16 } set_id(UInt32 id)17 void set_id(UInt32 id) { 18 id_ = id; 19 } set_terminal(UInt32 terminal)20 void set_terminal(UInt32 terminal) { 21 terminal_ = terminal; 22 } 23 str()24 const T &str() const { 25 return str_; 26 } weight()27 double weight() const { 28 return weight_; 29 } id()30 UInt32 id() const { 31 return id_; 32 } terminal()33 UInt32 terminal() const { 34 return terminal_; 35 } 36 37 private: 38 T str_; 39 double weight_; 40 UInt32 id_; 41 UInt32 terminal_; 42 }; 43 44 template <typename T> 45 inline bool operator<(const Key<T> &lhs, const T &rhs) { 46 return lhs.str() < rhs; 47 } 48 49 template <typename T> 50 inline bool operator<(const T &lhs, const Key<T> &rhs) { 51 return lhs < rhs.str(); 52 } 53 54 template <typename T> 55 inline bool operator<(const Key<T> &lhs, const Key<T> &rhs) { 56 return lhs.str() < rhs.str(); 57 } 58 59 template <typename T> 60 inline bool operator==(const Key<T> &lhs, const Key<T> &rhs) { 61 return lhs.str() == rhs.str(); 62 } 63 64 } // namespace marisa 65 66 #endif // MARISA_KEY_H_ 67