1#ifndef MARISA_KEY_H_
2#define MARISA_KEY_H_
3
4namespace marisa {
5
6template <typename T>
7class Key {
8 public:
9  Key() : str_(), weight_(0.0), id_(0), terminal_(0) {}
10
11  void set_str(const T &str) {
12    str_ = str;
13  }
14  void set_weight(double weight) {
15    weight_ = weight;
16  }
17  void set_id(UInt32 id) {
18    id_ = id;
19  }
20  void set_terminal(UInt32 terminal) {
21    terminal_ = terminal;
22  }
23
24  const T &str() const {
25    return str_;
26  }
27  double weight() const {
28    return weight_;
29  }
30  UInt32 id() const {
31    return id_;
32  }
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
44template <typename T>
45inline bool operator<(const Key<T> &lhs, const T &rhs) {
46  return lhs.str() < rhs;
47}
48
49template <typename T>
50inline bool operator<(const T &lhs, const Key<T> &rhs) {
51  return lhs < rhs.str();
52}
53
54template <typename T>
55inline bool operator<(const Key<T> &lhs, const Key<T> &rhs) {
56  return lhs.str() < rhs.str();
57}
58
59template <typename T>
60inline 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