void GaloisFieldDict::gf_rshift(const integer_class n, const Ptr<GaloisFieldDict> &quo, const Ptr<GaloisFieldDict> &rem) const { std::vector<integer_class> dict_quo; *quo = GaloisFieldDict::from_vec(dict_quo, modulo_); unsigned n_val = mp_get_si(n); if (n_val < dict_.size()) { quo->dict_.insert(quo->dict_.end(), dict_.begin() + n_val, dict_.end()); std::vector<integer_class> dict_rem(dict_.begin(), dict_.begin() + n_val); *rem = GaloisFieldDict::from_vec(dict_rem, modulo_); } else { *rem = static_cast<GaloisFieldDict>(*this); } }
void LLSpellChecker::setSecondaryDictionaries(dict_list_t dict_list) { if (!getUseSpellCheck()) { return; } // Check if we're only adding secondary dictionaries, or removing them dict_list_t dict_add(llmax(dict_list.size(), mDictSecondary.size())), dict_rem(llmax(dict_list.size(), mDictSecondary.size())); dict_list.sort(); mDictSecondary.sort(); dict_list_t::iterator end_added = std::set_difference(dict_list.begin(), dict_list.end(), mDictSecondary.begin(), mDictSecondary.end(), dict_add.begin()); dict_list_t::iterator end_removed = std::set_difference(mDictSecondary.begin(), mDictSecondary.end(), dict_list.begin(), dict_list.end(), dict_rem.begin()); if (end_removed != dict_rem.begin()) // We can't remove secondary dictionaries so we need to recreate the Hunspell instance { mDictSecondary = dict_list; std::string dict_language = mDictLanguage; initHunspell(dict_language); } else if (end_added != dict_add.begin()) // Add the new secondary dictionaries one by one { const std::string app_path = getDictionaryAppPath(); const std::string user_path = getDictionaryUserPath(); for (dict_list_t::const_iterator it_added = dict_add.begin(); it_added != end_added; ++it_added) { const LLSD dict_entry = getDictionaryData(*it_added); if ( (!dict_entry.isDefined()) || (!dict_entry["installed"].asBoolean()) ) { continue; } const std::string strFileDic = dict_entry["name"].asString() + ".dic"; if (gDirUtilp->fileExists(user_path + strFileDic)) { mHunspell->add_dic((user_path + strFileDic).c_str()); } else if (gDirUtilp->fileExists(app_path + strFileDic)) { mHunspell->add_dic((app_path + strFileDic).c_str()); } } mDictSecondary = dict_list; sSettingsChangeSignal(); } }