diff --git a/Source/Engine/McBopomofoLM.cpp b/Source/Engine/McBopomofoLM.cpp index 8c32d0d4..6e5cb650 100644 --- a/Source/Engine/McBopomofoLM.cpp +++ b/Source/Engine/McBopomofoLM.cpp @@ -39,6 +39,11 @@ McBopomofoLM::~McBopomofoLM() m_phraseReplacement.close(); } +bool McBopomofoLM::isDataModelLoaded() +{ + return m_languageModel.isLoaded(); +} + void McBopomofoLM::loadLanguageModel(const char* languageModelDataPath) { if (languageModelDataPath) { diff --git a/Source/Engine/McBopomofoLM.h b/Source/Engine/McBopomofoLM.h index b70723f9..1636c55d 100644 --- a/Source/Engine/McBopomofoLM.h +++ b/Source/Engine/McBopomofoLM.h @@ -64,6 +64,8 @@ public: /// Asks to load the primary language model a the given path. /// @param languageModelPath Thw path of the language model. void loadLanguageModel(const char* languageModelPath); + /// If the data model is already loaded. + bool isDataModelLoaded(); /// Asks to load the user phrases and excluded phrases at the given path. /// @param userPhrasesPath The path of user phrases. /// @param excludedPhrasesPath The path of excluded phrases. diff --git a/Source/Engine/ParselessLM.cpp b/Source/Engine/ParselessLM.cpp index c0de5c00..2efe9701 100644 --- a/Source/Engine/ParselessLM.cpp +++ b/Source/Engine/ParselessLM.cpp @@ -32,6 +32,14 @@ McBopomofo::ParselessLM::~ParselessLM() { close(); } +bool McBopomofo::ParselessLM::isLoaded() +{ + if (data_) { + return true; + } + return false; +} + bool McBopomofo::ParselessLM::open(const std::string_view& path) { if (data_) { diff --git a/Source/Engine/ParselessLM.h b/Source/Engine/ParselessLM.h index 8d2c0b88..e3b4632a 100644 --- a/Source/Engine/ParselessLM.h +++ b/Source/Engine/ParselessLM.h @@ -37,6 +37,7 @@ class ParselessLM : public Formosa::Gramambular::LanguageModel { public: ~ParselessLM() override; + bool isLoaded(); bool open(const std::string_view& path); void close(); diff --git a/Source/LanguageModelManager.mm b/Source/LanguageModelManager.mm index 87b46cf9..06c11c12 100644 --- a/Source/LanguageModelManager.mm +++ b/Source/LanguageModelManager.mm @@ -55,17 +55,25 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, McBopomo + (void)loadDataModels { - LTLoadLanguageModelFile(@"data", gLanguageModelMcBopomofo); - LTLoadLanguageModelFile(@"data-plain-bpmf", gLanguageModelPlainBopomofo); + if (!gLanguageModelMcBopomofo.isDataModelLoaded()) { + LTLoadLanguageModelFile(@"data", gLanguageModelMcBopomofo); + } + if (!gLanguageModelPlainBopomofo.isDataModelLoaded()) { + LTLoadLanguageModelFile(@"data-plain-bpmf", gLanguageModelPlainBopomofo); + } } + (void)loadDataModel:(InputMode)mode { if ([mode isEqualToString:InputModeBopomofo]) { - LTLoadLanguageModelFile(@"data", gLanguageModelMcBopomofo); + if (!gLanguageModelMcBopomofo.isDataModelLoaded()) { + LTLoadLanguageModelFile(@"data", gLanguageModelMcBopomofo); + } } if ([mode isEqualToString:InputModePlainBopomofo]) { - LTLoadLanguageModelFile(@"data-plain-bpmf", gLanguageModelPlainBopomofo); + if (!gLanguageModelPlainBopomofo.isDataModelLoaded()) { + LTLoadLanguageModelFile(@"data-plain-bpmf", gLanguageModelPlainBopomofo); + } } }