From 0688f55171628a91080e0b23f95678ec600a5b61 Mon Sep 17 00:00:00 2001 From: myrix Date: Sat, 18 Dec 2021 20:07:41 +0300 Subject: [PATCH] optimized keyword parsing --- apps/openmw/mwdialogue/hypertextparser.cpp | 26 +++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwdialogue/hypertextparser.cpp b/apps/openmw/mwdialogue/hypertextparser.cpp index caafa5f324..389488cbe1 100644 --- a/apps/openmw/mwdialogue/hypertextparser.cpp +++ b/apps/openmw/mwdialogue/hypertextparser.cpp @@ -47,19 +47,25 @@ namespace MWDialogue void tokenizeKeywords(const std::string & text, std::vector & tokens) { - const MWWorld::Store & dialogs = - MWBase::Environment::get().getWorld()->getStore().get(); + static bool keywordSearchInitialized = false; + static KeywordSearch keywordSearch; - std::vector keywordList; - keywordList.reserve(dialogs.getSize()); - for (const auto& it : dialogs) - keywordList.push_back(Misc::StringUtils::lowerCase(it.mId)); - sort(keywordList.begin(), keywordList.end()); + if (!keywordSearchInitialized) + { + const MWWorld::Store & dialogs = + MWBase::Environment::get().getWorld()->getStore().get(); - KeywordSearch keywordSearch; + std::vector keywordList; + keywordList.reserve(dialogs.getSize()); + for (const auto& it : dialogs) + keywordList.push_back(Misc::StringUtils::lowerCase(it.mId)); + sort(keywordList.begin(), keywordList.end()); - for (const auto& it : keywordList) - keywordSearch.seed(it, 0 /*unused*/); + for (const auto& it : keywordList) + keywordSearch.seed(it, 0 /*unused*/); + + keywordSearchInitialized = true; + } std::vector::Match> matches; keywordSearch.highlightKeywords(text.begin(), text.end(), matches);