diff --git a/src/mnemonics/chinese_simplified.h b/src/mnemonics/chinese_simplified.h index 1ae8c89d6..0566b1079 100644 --- a/src/mnemonics/chinese_simplified.h +++ b/src/mnemonics/chinese_simplified.h @@ -72,7 +72,10 @@ namespace Language class Chinese_Simplified: public Base { public: - Chinese_Simplified(): Base("简体中文 (中国)", "Chinese (simplified)", std::vector({ + Chinese_Simplified(): Base("简体中文 (中国)", "Chinese (simplified)", {}, 1) + { + static constexpr const char * const words[NWORDS] = + { "的", "一", "是", @@ -1699,8 +1702,8 @@ namespace Language "秒", "浙", "貌" - }), 1) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/dutch.h b/src/mnemonics/dutch.h index c9806f450..801caf986 100644 --- a/src/mnemonics/dutch.h +++ b/src/mnemonics/dutch.h @@ -49,7 +49,10 @@ namespace Language class Dutch: public Base { public: - Dutch(): Base("Nederlands", "Dutch", std::vector({ + Dutch(): Base("Nederlands", "Dutch", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "aalglad", "aalscholver", "aambeeld", @@ -1676,8 +1679,8 @@ namespace Language "zwiep", "zwijmel", "zworen" - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/english.h b/src/mnemonics/english.h index ee087674d..d5c5594ef 100644 --- a/src/mnemonics/english.h +++ b/src/mnemonics/english.h @@ -49,7 +49,10 @@ namespace Language class English: public Base { public: - English(): Base("English", "English", std::vector({ + English(): Base("English", "English", {}, 3) + { + static constexpr const char * const words[NWORDS] = + { "abbey", "abducts", "ability", @@ -1676,8 +1679,8 @@ namespace Language "zombie", "zones", "zoom" - }), 3) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/english_old.h b/src/mnemonics/english_old.h index b31491646..e35b907df 100644 --- a/src/mnemonics/english_old.h +++ b/src/mnemonics/english_old.h @@ -51,7 +51,10 @@ namespace Language class EnglishOld: public Base { public: - EnglishOld(): Base("EnglishOld", "English (old)", std::vector({ + EnglishOld(): Base("EnglishOld", "English (old)", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "like", "just", "love", @@ -1678,8 +1681,8 @@ namespace Language "unseen", "weapon", "weary" - }), 4) - { + }; + set_words(words); populate_maps(ALLOW_DUPLICATE_PREFIXES | ALLOW_SHORT_WORDS); } }; diff --git a/src/mnemonics/esperanto.h b/src/mnemonics/esperanto.h index a1d1a3f30..b0be235ed 100644 --- a/src/mnemonics/esperanto.h +++ b/src/mnemonics/esperanto.h @@ -58,7 +58,10 @@ namespace Language class Esperanto: public Base { public: - Esperanto(): Base("Esperanto", "Esperanto", std::vector({ + Esperanto(): Base("Esperanto", "Esperanto", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "abako", "abdiki", "abelo", @@ -1685,8 +1688,8 @@ namespace Language "zorgi", "zukino", "zumilo", - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/french.h b/src/mnemonics/french.h index 7eaf45650..48ec46f78 100644 --- a/src/mnemonics/french.h +++ b/src/mnemonics/french.h @@ -49,7 +49,10 @@ namespace Language class French: public Base { public: - French(): Base("Français", "French", std::vector({ + French(): Base("Français", "French", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "abandon", "abattre", "aboi", @@ -1676,8 +1679,8 @@ namespace Language "zinc", "zone", "zoom" - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/german.h b/src/mnemonics/german.h index 8eff43523..883a173a3 100644 --- a/src/mnemonics/german.h +++ b/src/mnemonics/german.h @@ -51,7 +51,10 @@ namespace Language class German: public Base { public: - German(): Base("Deutsch", "German", std::vector({ + German(): Base("Deutsch", "German", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "Abakus", "Abart", "abbilden", @@ -1678,8 +1681,8 @@ namespace Language "Zündung", "Zweck", "Zyklop" - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/italian.h b/src/mnemonics/italian.h index d5ecb74f4..57cdfa25e 100644 --- a/src/mnemonics/italian.h +++ b/src/mnemonics/italian.h @@ -51,7 +51,10 @@ namespace Language class Italian: public Base { public: - Italian(): Base("Italiano", "Italian", std::vector({ + Italian(): Base("Italiano", "Italian", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "abbinare", "abbonato", "abisso", @@ -1678,8 +1681,8 @@ namespace Language "zolfo", "zombie", "zucchero" - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/japanese.h b/src/mnemonics/japanese.h index f3b3e4924..5baabedf2 100644 --- a/src/mnemonics/japanese.h +++ b/src/mnemonics/japanese.h @@ -71,7 +71,10 @@ namespace Language class Japanese: public Base { public: - Japanese(): Base("日本語", "Japanese", std::vector({ + Japanese(): Base("日本語", "Japanese", {}, 3) + { + static constexpr const char * const words[NWORDS] = + { "あいこくしん", "あいさつ", "あいだ", @@ -1698,8 +1701,8 @@ namespace Language "ひさん", "びじゅつかん", "ひしょ" - }), 3) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/language_base.h b/src/mnemonics/language_base.h index cf518ab2a..52e784cef 100644 --- a/src/mnemonics/language_base.h +++ b/src/mnemonics/language_base.h @@ -83,7 +83,10 @@ namespace Language ALLOW_SHORT_WORDS = 1<<0, ALLOW_DUPLICATE_PREFIXES = 1<<1, }; - const std::vector word_list; /*!< A pointer to the array of words */ + enum { + NWORDS = 1626 + }; + std::vector word_list; /*!< A pointer to the array of words */ std::unordered_map word_map; /*!< hash table to find word's index */ std::unordered_map trimmed_word_map; /*!< hash table to find word's trimmed index */ std::string language_name; /*!< Name of language */ @@ -96,7 +99,7 @@ namespace Language { int ii; std::vector::const_iterator it; - if (word_list.size () != 1626) + if (word_list.size () != NWORDS) throw std::runtime_error("Wrong word list length for " + language_name); for (it = word_list.begin(), ii = 0; it != word_list.end(); it++, ii++) { @@ -138,6 +141,12 @@ namespace Language virtual ~Base() { } + void set_words(const char * const words[]) + { + word_list.resize(NWORDS); + for (size_t i = 0; i < NWORDS; ++i) + word_list[i] = words[i]; + } /*! * \brief Returns a pointer to the word list. * \return A pointer to the word list. diff --git a/src/mnemonics/lojban.h b/src/mnemonics/lojban.h index 0966a1169..5162a8ec9 100644 --- a/src/mnemonics/lojban.h +++ b/src/mnemonics/lojban.h @@ -56,7 +56,10 @@ namespace Language class Lojban: public Base { public: - Lojban(): Base("Lojban", "Lojban", std::vector({ + Lojban(): Base("Lojban", "Lojban", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "backi", "bacru", "badna", @@ -1683,8 +1686,8 @@ namespace Language "noltruti'u", "samtci", "snaxa'a", - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/portuguese.h b/src/mnemonics/portuguese.h index 0195389ce..af04f89c2 100644 --- a/src/mnemonics/portuguese.h +++ b/src/mnemonics/portuguese.h @@ -72,7 +72,10 @@ namespace Language class Portuguese: public Base { public: - Portuguese(): Base("Português", "Portuguese", std::vector({ + Portuguese(): Base("Português", "Portuguese", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "abaular", "abdominal", "abeto", @@ -1699,8 +1702,8 @@ namespace Language "zeloso", "zenite", "zumbi" - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/russian.h b/src/mnemonics/russian.h index d5dd556ef..f3e70ede6 100644 --- a/src/mnemonics/russian.h +++ b/src/mnemonics/russian.h @@ -51,7 +51,10 @@ namespace Language class Russian: public Base { public: - Russian(): Base("русский язык", "Russian", std::vector({ + Russian(): Base("русский язык", "Russian", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "абажур", "абзац", "абонент", @@ -1678,8 +1681,8 @@ namespace Language "яхта", "ячейка", "ящик" - }), 4) - { + }; + set_words(words); populate_maps(); } }; diff --git a/src/mnemonics/spanish.h b/src/mnemonics/spanish.h index 51f38fede..4d7a896a6 100644 --- a/src/mnemonics/spanish.h +++ b/src/mnemonics/spanish.h @@ -72,7 +72,10 @@ namespace Language class Spanish: public Base { public: - Spanish(): Base("Español", "Spanish", std::vector({ + Spanish(): Base("Español", "Spanish", {}, 4) + { + static constexpr const char * const words[NWORDS] = + { "ábaco", "abdomen", "abeja", @@ -1699,8 +1702,8 @@ namespace Language "risa", "ritmo", "rito" - }), 4) - { + }; + set_words(words); populate_maps(ALLOW_SHORT_WORDS); } };