diff --git a/src/rime/candidate.h b/src/rime/candidate.h index 2f75dcfec9..1a09deeec1 100644 --- a/src/rime/candidate.h +++ b/src/rime/candidate.h @@ -41,11 +41,29 @@ class Candidate { void set_end(size_t end) { end_ = end; } void set_quality(double quality) { quality_ = quality; } + // per-candidate data + void set_data(const string& data_tag, an datum = nullptr) { + data_[data_tag] = datum; + } + an get_data(const string& data_tag) const { + auto it = data_.find(data_tag); + return it != data_.end() ? it->second : nullptr; + } + vector get_data_keys() const { + vector keys; + keys.reserve(data_.size()); + for (const auto& pair : data_) { + keys.push_back(pair.first); + } + return keys; + } + private: string type_; size_t start_ = 0; size_t end_ = 0; double quality_ = 0.; + hash_map> data_; }; using CandidateQueue = list>;