7 #include "libime/pinyin/pinyinmatchstate.h" 10 #include <unordered_set> 11 #include <fcitx-utils/macros.h> 12 #include "libime/pinyin/pinyinencoder.h" 13 #include "pinyincontext.h" 14 #include "pinyinime.h" 15 #include "pinyinmatchstate_p.h" 19 PinyinMatchState::PinyinMatchState(PinyinContext *context)
20 : d_ptr(std::make_unique<PinyinMatchStatePrivate>(context)) {}
21 PinyinMatchState::~PinyinMatchState() {}
23 void PinyinMatchState::clear() {
25 d->matchedPaths_.clear();
26 d->nodeCacheMap_.clear();
27 d->matchCacheMap_.clear();
30 void PinyinMatchState::discardNode(
31 const std::unordered_set<const SegmentGraphNode *> &nodes) {
33 for (
const auto *node : nodes) {
34 d->matchedPaths_.erase(node);
36 for (
auto &p : d->matchedPaths_) {
38 auto iter = l.begin();
39 while (iter != l.end()) {
40 if (nodes.contains(iter->path_.front())) {
49 PinyinFuzzyFlags PinyinMatchState::fuzzyFlags()
const {
51 return d->context_->ime()->fuzzyFlags();
54 std::shared_ptr<const ShuangpinProfile>
55 PinyinMatchState::shuangpinProfile()
const {
57 if (d->context_->useShuangpin()) {
58 return d->context_->ime()->shuangpinProfile();
63 std::shared_ptr<const PinyinCorrectionProfile>
64 PinyinMatchState::correctionProfile()
const {
66 if (d->context_->ime()->fuzzyFlags().test(PinyinFuzzyFlag::Correction)) {
67 return d->context_->ime()->correctionProfile();
72 size_t PinyinMatchState::partialLongWordLimit()
const {
74 return d->context_->ime()->partialLongWordLimit();
77 void PinyinMatchState::discardDictionary(
size_t idx) {
79 d->matchCacheMap_.erase(d->context_->ime()->dict()->trie(idx));
80 d->nodeCacheMap_.erase(d->context_->ime()->dict()->trie(idx));