diff --git a/src/mnemonics/dutch.h b/src/mnemonics/dutch.h index d0a972e5..0d7a637e 100644 --- a/src/mnemonics/dutch.h +++ b/src/mnemonics/dutch.h @@ -49,9 +49,7 @@ namespace Language class Dutch: public Base { public: - Dutch() - { - word_list = new std::vector({ + Dutch(): Base("Dutch", std::vector({ "aalglad", "aalscholver", "aambeeld", @@ -1678,11 +1676,8 @@ namespace Language "zwiep", "zwijmel", "zworen" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "Dutch"; + }), 4) + { populate_maps(); } }; diff --git a/src/mnemonics/english.h b/src/mnemonics/english.h index 703c7780..e6cfa895 100644 --- a/src/mnemonics/english.h +++ b/src/mnemonics/english.h @@ -49,9 +49,7 @@ namespace Language class English: public Base { public: - English() - { - word_list = new std::vector({ + English(): Base("English", std::vector({ "abbey", "abducts", "ability", @@ -1678,11 +1676,8 @@ namespace Language "zombie", "zones", "zoom" - }); - unique_prefix_length = 3; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "English"; + }), 3) + { populate_maps(); } }; diff --git a/src/mnemonics/french.h b/src/mnemonics/french.h index 2f6eb7e8..6cf44a19 100644 --- a/src/mnemonics/french.h +++ b/src/mnemonics/french.h @@ -49,9 +49,7 @@ namespace Language class French: public Base { public: - French() - { - word_list = new std::vector({ + French(): Base("French", std::vector({ "abandon", "abattre", "aboi", @@ -1678,11 +1676,8 @@ namespace Language "zinc", "zone", "zoom" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "French"; + }), 4) + { populate_maps(); } }; diff --git a/src/mnemonics/german.h b/src/mnemonics/german.h index a9614e4a..1a1e6b46 100644 --- a/src/mnemonics/german.h +++ b/src/mnemonics/german.h @@ -51,9 +51,7 @@ namespace Language class German: public Base { public: - German() - { - word_list = new std::vector({ + German(): Base("German", std::vector({ "Abakus", "Abart", "abbilden", @@ -1680,11 +1678,8 @@ namespace Language "Zündung", "Zweck", "Zyklop" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "German"; + }), 4) + { populate_maps(); } }; diff --git a/src/mnemonics/italian.h b/src/mnemonics/italian.h index 24ed6744..28cee9d9 100644 --- a/src/mnemonics/italian.h +++ b/src/mnemonics/italian.h @@ -51,9 +51,7 @@ namespace Language class Italian: public Base { public: - Italian() - { - word_list = new std::vector({ + Italian(): Base("Italian", std::vector({ "abbinare", "abbonato", "abisso", @@ -1680,11 +1678,8 @@ namespace Language "zolfo", "zombie", "zucchero" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "Italian"; + }), 4) + { populate_maps(); } }; diff --git a/src/mnemonics/japanese.h b/src/mnemonics/japanese.h index b437ae2a..09d05d13 100644 --- a/src/mnemonics/japanese.h +++ b/src/mnemonics/japanese.h @@ -51,9 +51,7 @@ namespace Language class Japanese: public Base { public: - Japanese() - { - word_list = new std::vector({ + Japanese(): Base("Japanese", std::vector({ "あいこくしん", "あいさつ", "あいだ", @@ -1680,11 +1678,8 @@ namespace Language "ひさん", "びじゅつかん", "ひしょ" - }); - unique_prefix_length = 3; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "Japanese"; + }), 3) + { populate_maps(); } }; diff --git a/src/mnemonics/language_base.h b/src/mnemonics/language_base.h index 5ad4211d..c085a8b1 100644 --- a/src/mnemonics/language_base.h +++ b/src/mnemonics/language_base.h @@ -73,9 +73,9 @@ namespace Language class Base { protected: - 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 */ + const 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 */ uint32_t unique_prefix_length; /*!< Number of unique starting characters to trim the wordlist to when matching */ /*! @@ -84,33 +84,29 @@ namespace Language void populate_maps() { int ii; - std::vector::iterator it; - for (it = word_list->begin(), ii = 0; it != word_list->end(); it++, ii++) + std::vector::const_iterator it; + for (it = word_list.begin(), ii = 0; it != word_list.end(); it++, ii++) { - (*word_map)[*it] = ii; + word_map[*it] = ii; if (it->length() > unique_prefix_length) { - (*trimmed_word_map)[utf8prefix(*it, unique_prefix_length)] = ii; + trimmed_word_map[utf8prefix(*it, unique_prefix_length)] = ii; } else { - (*trimmed_word_map)[*it] = ii; + trimmed_word_map[*it] = ii; } } } public: - Base() + Base(const char *language_name, const std::vector &words, uint32_t prefix_length): + word_list(words), + unique_prefix_length(prefix_length), + language_name(language_name) { - word_list = new std::vector; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - unique_prefix_length = 4; } virtual ~Base() { - delete word_list; - delete word_map; - delete trimmed_word_map; } /*! * \brief Returns a pointer to the word list. @@ -118,7 +114,7 @@ namespace Language */ const std::vector& get_word_list() const { - return *word_list; + return word_list; } /*! * \brief Returns a pointer to the word map. @@ -126,7 +122,7 @@ namespace Language */ const std::unordered_map& get_word_map() const { - return *word_map; + return word_map; } /*! * \brief Returns a pointer to the trimmed word map. @@ -134,13 +130,13 @@ namespace Language */ const std::unordered_map& get_trimmed_word_map() const { - return *trimmed_word_map; + return trimmed_word_map; } /*! * \brief Returns the name of the language. * \return Name of the language. */ - std::string get_language_name() const + const std::string &get_language_name() const { return language_name; } diff --git a/src/mnemonics/old_english.h b/src/mnemonics/old_english.h index 690e4661..1a96f4b1 100644 --- a/src/mnemonics/old_english.h +++ b/src/mnemonics/old_english.h @@ -51,9 +51,7 @@ namespace Language class OldEnglish: public Base { public: - OldEnglish() - { - word_list = new std::vector({ + OldEnglish(): Base("OldEnglish", std::vector({ "like", "just", "love", @@ -1680,11 +1678,8 @@ namespace Language "unseen", "weapon", "weary" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "OldEnglish"; + }), 4) + { populate_maps(); } }; diff --git a/src/mnemonics/portuguese.h b/src/mnemonics/portuguese.h index 91e2145b..09d7132f 100644 --- a/src/mnemonics/portuguese.h +++ b/src/mnemonics/portuguese.h @@ -49,9 +49,7 @@ namespace Language class Portuguese: public Base { public: - Portuguese() - { - word_list = new std::vector({ + Portuguese(): Base("Portuguese", std::vector({ "abaular", "abdominal", "abeto", @@ -1678,11 +1676,8 @@ namespace Language "zeloso", "zenite", "zumbi" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "Portuguese"; + }), 4) + { populate_maps(); } }; diff --git a/src/mnemonics/russian.h b/src/mnemonics/russian.h index 981f40d9..b3db4aa4 100644 --- a/src/mnemonics/russian.h +++ b/src/mnemonics/russian.h @@ -51,9 +51,7 @@ namespace Language class Russian: public Base { public: - Russian() - { - word_list = new std::vector({ + Russian(): Base("Russian", std::vector({ "абажур", "абзац", "абонент", @@ -1680,11 +1678,8 @@ namespace Language "яхта", "ячейка", "ящик" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "Russian"; + }), 4) + { populate_maps(); } }; diff --git a/src/mnemonics/spanish.h b/src/mnemonics/spanish.h index ec3a8991..a9a93243 100644 --- a/src/mnemonics/spanish.h +++ b/src/mnemonics/spanish.h @@ -51,9 +51,7 @@ namespace Language class Spanish: public Base { public: - Spanish() - { - word_list = new std::vector({ + Spanish(): Base("Spanish", std::vector({ "ábaco", "abdomen", "abeja", @@ -1680,11 +1678,8 @@ namespace Language "risa", "ritmo", "rito" - }); - unique_prefix_length = 4; - word_map = new std::unordered_map; - trimmed_word_map = new std::unordered_map; - language_name = "Spanish"; + }), 4) + { populate_maps(); } };