7 #include "triedictionary.h" 10 #include <string_view> 12 #include <boost/ptr_container/ptr_vector.hpp> 13 #include <fcitx-utils/connectableobject.h> 14 #include <fcitx-utils/macros.h> 21 : fcitx::QPtrHolder<TrieDictionary>(q) {}
26 boost::ptr_vector<typename TrieDictionary::TrieType> tries_;
29 TrieDictionary::TrieDictionary()
30 : d_ptr(std::make_unique<TrieDictionaryPrivate>(
this)) {
35 TrieDictionary::~TrieDictionary() {}
37 void TrieDictionary::addEmptyDict() {
39 d->tries_.push_back(
new TrieType);
40 emit<TrieDictionary::dictSizeChanged>(d->tries_.size());
45 if (idx < UserDict + 1 || idx >= d->tries_.size()) {
49 for (
auto i = idx; i < d->tries_.size(); i++) {
50 emit<TrieDictionary::dictionaryChanged>(i);
52 d->tries_.erase(d->tries_.begin() + idx, d->tries_.end());
53 emit<TrieDictionary::dictSizeChanged>(d->tries_.size());
56 void TrieDictionary::removeAll() { removeFrom(UserDict + 1); }
58 void TrieDictionary::clear(
size_t idx) {
60 d->tries_[idx].clear();
61 emit<TrieDictionary::dictionaryChanged>(idx);
66 return &d->tries_[idx];
70 *mutableTrie(idx) = std::move(trie);
71 emit<TrieDictionary::dictionaryChanged>(idx);
76 return &d->tries_[idx];
79 size_t TrieDictionary::dictSize()
const {
81 return d->tries_.size();
84 void TrieDictionary::addWord(
size_t idx, std::string_view key,
float cost) {
86 d->tries_[idx].set(key.data(), key.size(), cost);
87 emit<TrieDictionary::dictionaryChanged>(idx);
90 bool TrieDictionary::removeWord(
size_t idx, std::string_view key) {
92 if (d->tries_[idx].erase(key.data(), key.size())) {
93 emit<TrieDictionary::dictionaryChanged>(idx);
void setTrie(size_t idx, TrieType trie)
Set trie from external source.
void removeFrom(size_t idx)
Remove all dictionary from given index.