Get rid of namespace, use header instead.

This commit is contained in:
Muzychenko Andrey 2022-08-29 08:29:22 +03:00
parent a489c7d897
commit dae4b1bf20
2 changed files with 353 additions and 353 deletions

View File

@ -2,97 +2,8 @@
#include "translations.h" #include "translations.h"
#include "options.h" #include "options.h"
template <typename Key, typename Value, int N>
struct InitializedArray
{
InitializedArray() : Store{} lang translations::current_language = lang::English;
{
}
InitializedArray(const std::initializer_list<std::pair<Key, Value>>& iList)
{
Store.reserve(iList.size());
for (const auto& pair : iList)
{
size_t index = static_cast<int>(pair.first);
if(Store.size() <= index)
Store.resize(index + 1);
Store[index] = pair.second;
}
}
bool contains(Key index) const
{
return Store.size() > static_cast<int>(index);
}
const Value& operator[](Key index) const
{
return Store[static_cast<int>(index)];
}
const Value* data() const
{
return Store.data();
}
size_t size() const {
return Store.size();
}
private:
std::vector<Value> Store;
};
enum class lang {
Arabic,
Czech,
Danish,
German,
Greek,
English,
Spanish,
Finnish,
French,
Hebrew,
Hungarian,
Italian,
Japanese,
Korean,
Norwegian,
Dutch,
Polish,
BrazilianPortuguese,
Portuguese,
Russian,
Swedish,
Turkish,
SimplifiedChinese,
TraditionalChinese,
NUMBER
};
namespace {
// Use anonymous namespace instead of static to be able to forward declare translated_strings
extern const InitializedArray<
lang,
languageInfo,
(int)lang::NUMBER
> languages;
extern const InitializedArray<
Msg,
InitializedArray<
lang,
const char*,
(int)lang::NUMBER
>,
(int)Msg::NUMBER
> translated_strings;
lang current_language = lang::English;
}
const languageInfo* translations::get_languages(size_t* languages_number) { const languageInfo* translations::get_languages(size_t* languages_number) {
if(languages_number) { if(languages_number) {
@ -164,12 +75,11 @@ void translations::get_glyph_range(ImVector<ImWchar>* ranges)
builder.BuildRanges(ranges); builder.BuildRanges(ranges);
} }
namespace {
const InitializedArray< const InitializedArray<
lang, lang,
languageInfo, languageInfo,
(int)lang::NUMBER (int)lang::NUMBER
> languages = > translations::languages =
{ {
{ lang::Arabic, {"ar", "Arabic" } }, { lang::Arabic, {"ar", "Arabic" } },
{ lang::Czech, {"cs", "Czech" } }, { lang::Czech, {"cs", "Czech" } },
@ -205,7 +115,7 @@ const InitializedArray<
(int)lang::NUMBER (int)lang::NUMBER
>, >,
(int)Msg::NUMBER (int)Msg::NUMBER
> translated_strings = > translations::translated_strings =
{ {
{ {
Msg::STRING101, Msg::STRING101,
@ -7371,5 +7281,3 @@ const InitializedArray<
}, },
}, },
}; };
} /* namespace */

View File

@ -2,272 +2,364 @@
enum class Msg enum class Msg
{ {
STRING101, STRING101,
STRING102, STRING102,
STRING103, STRING103,
STRING104, STRING104,
STRING105, STRING105,
STRING106, STRING106,
STRING107, STRING107,
STRING108, STRING108,
STRING109, STRING109,
STRING110, STRING110,
STRING111, STRING111,
STRING112, STRING112,
STRING113, STRING113,
STRING114, STRING114,
STRING115, STRING115,
STRING116, STRING116,
STRING117, STRING117,
STRING118, STRING118,
STRING119, STRING119,
STRING120, STRING120,
STRING121, STRING121,
STRING122, STRING122,
STRING123, STRING123,
STRING124, STRING124,
STRING125, STRING125,
STRING126, STRING126,
STRING127, STRING127,
STRING128, STRING128,
STRING129, STRING129,
STRING130, STRING130,
STRING131, STRING131,
STRING132, STRING132,
STRING133, STRING133,
STRING134, STRING134,
STRING135, STRING135,
STRING136, STRING136,
STRING137, STRING137,
STRING138, STRING138,
STRING139, STRING139,
STRING140, STRING140,
STRING141, STRING141,
STRING142, STRING142,
STRING143, STRING143,
STRING144, STRING144,
STRING145, STRING145,
STRING146, STRING146,
STRING147, STRING147,
STRING148, STRING148,
STRING149, STRING149,
STRING150, STRING150,
STRING151, STRING151,
STRING152, STRING152,
STRING153, STRING153,
STRING154, STRING154,
STRING155, STRING155,
STRING156, STRING156,
STRING157, STRING157,
STRING158, STRING158,
STRING159, STRING159,
STRING160, STRING160,
STRING161, STRING161,
STRING162, STRING162,
STRING163, STRING163,
STRING164, STRING164,
STRING165, STRING165,
STRING166, STRING166,
STRING167, STRING167,
STRING168, STRING168,
STRING169, STRING169,
STRING170, STRING170,
STRING171, STRING171,
STRING172, STRING172,
STRING173, STRING173,
STRING174, STRING174,
STRING175, STRING175,
STRING176, STRING176,
STRING177, STRING177,
STRING178, STRING178,
STRING179, STRING179,
STRING180, STRING180,
STRING181, STRING181,
STRING182, STRING182,
STRING183, STRING183,
STRING184, STRING184,
STRING185, STRING185,
STRING186, STRING186,
STRING187, STRING187,
STRING188, STRING188,
STRING189, STRING189,
STRING190, STRING190,
STRING191, STRING191,
STRING192, STRING192,
STRING193, STRING193,
STRING194, STRING194,
STRING195, STRING195,
STRING196, STRING196,
STRING197, STRING197,
STRING198, STRING198,
STRING199, STRING199,
STRING200, STRING200,
STRING201, STRING201,
STRING202, STRING202,
STRING203, STRING203,
STRING204, STRING204,
STRING205, STRING205,
STRING206, STRING206,
STRING207, STRING207,
STRING208, STRING208,
STRING209, STRING209,
STRING210, STRING210,
STRING211, STRING211,
STRING212, STRING212,
STRING213, STRING213,
STRING214, STRING214,
STRING215, STRING215,
STRING216, STRING216,
STRING217, STRING217,
STRING218, STRING218,
STRING219, STRING219,
STRING220, STRING220,
STRING221, STRING221,
STRING222, STRING222,
STRING223, STRING223,
STRING224, STRING224,
STRING225, STRING225,
STRING226, STRING226,
STRING227, STRING227,
STRING228, STRING228,
STRING229, STRING229,
STRING230, STRING230,
STRING231, STRING231,
STRING232, STRING232,
STRING233, STRING233,
STRING234, STRING234,
STRING235, STRING235,
STRING236, STRING236,
STRING237, STRING237,
STRING238, STRING238,
STRING239, STRING239,
STRING240, STRING240,
STRING241, STRING241,
STRING242, STRING242,
STRING243, STRING243,
STRING244, STRING244,
STRING245, STRING245,
STRING246, STRING246,
STRING247, STRING247,
STRING248, STRING248,
STRING249, STRING249,
STRING250, STRING250,
STRING251, STRING251,
STRING252, STRING252,
STRING253, STRING253,
STRING254, STRING254,
STRING255, STRING255,
STRING256, STRING256,
STRING257, STRING257,
STRING258, STRING258,
STRING259, STRING259,
STRING260, STRING260,
STRING261, STRING261,
STRING262, STRING262,
STRING263, STRING263,
STRING264, STRING264,
STRING265, STRING265,
STRING266, STRING266,
STRING267, STRING267,
STRING268, STRING268,
STRING269, STRING269,
STRING270, STRING270,
STRING271, STRING271,
STRING272, STRING272,
STRING273, STRING273,
STRING274, STRING274,
STRING275, STRING275,
STRING276, STRING276,
STRING277, STRING277,
STRING278, STRING278,
STRING279, STRING279,
STRING280, STRING280,
STRING281, STRING281,
STRING282, STRING282,
STRING283, STRING283,
STRING284, STRING284,
STRING285, STRING285,
STRING286, STRING286,
STRING287, STRING287,
STRING288, STRING288,
STRING289, STRING289,
HIGHSCORES_Caption, HIGHSCORES_Caption,
HIGHSCORES_Ok, HIGHSCORES_Ok,
HIGHSCORES_Cancel, HIGHSCORES_Cancel,
HIGHSCORES_Clear, HIGHSCORES_Clear,
HIGHSCORES_Name, HIGHSCORES_Name,
HIGHSCORES_Score, HIGHSCORES_Score,
HIGHSCORES_Rank, HIGHSCORES_Rank,
HIGHSCORES_Rank1, HIGHSCORES_Rank1,
HIGHSCORES_Rank2, HIGHSCORES_Rank2,
HIGHSCORES_Rank3, HIGHSCORES_Rank3,
HIGHSCORES_Rank4, HIGHSCORES_Rank4,
HIGHSCORES_Rank5, HIGHSCORES_Rank5,
KEYMAPPER_Caption, KEYMAPPER_Caption,
KEYMAPPER_Ok, KEYMAPPER_Ok,
KEYMAPPER_Cancel, KEYMAPPER_Cancel,
KEYMAPPER_FlipperL, KEYMAPPER_FlipperL,
KEYMAPPER_FlipperR, KEYMAPPER_FlipperR,
KEYMAPPER_Plunger, KEYMAPPER_Plunger,
KEYMAPPER_BumpLeft, KEYMAPPER_BumpLeft,
KEYMAPPER_BumpRight, KEYMAPPER_BumpRight,
KEYMAPPER_BumpBottom, KEYMAPPER_BumpBottom,
KEYMAPPER_Default, KEYMAPPER_Default,
KEYMAPPER_Help1, KEYMAPPER_Help1,
KEYMAPPER_Help2, KEYMAPPER_Help2,
KEYMAPPER_Groupbox1, KEYMAPPER_Groupbox1,
KEYMAPPER_Groupbox2, KEYMAPPER_Groupbox2,
Menu1_New_Game, Menu1_New_Game,
Menu1_About_Pinball, Menu1_About_Pinball,
Menu1_High_Scores, Menu1_High_Scores,
Menu1_Exit, Menu1_Exit,
Menu1_Sounds, Menu1_Sounds,
Menu1_Music, Menu1_Music,
Menu1_Help_Topics, Menu1_Help_Topics,
Menu1_Launch_Ball, Menu1_Launch_Ball,
Menu1_Pause_Resume_Game, Menu1_Pause_Resume_Game,
Menu1_Full_Screen, Menu1_Full_Screen,
Menu1_Demo, Menu1_Demo,
Menu1_Select_Table, Menu1_Select_Table,
Menu1_Player_Controls, Menu1_Player_Controls,
Menu1_1Player, Menu1_1Player,
Menu1_2Players, Menu1_2Players,
Menu1_3Players, Menu1_3Players,
Menu1_4Players, Menu1_4Players,
Menu1_MaximumResolution, Menu1_MaximumResolution,
Menu1_640x480, Menu1_640x480,
Menu1_800x600, Menu1_800x600,
Menu1_1024x768, Menu1_1024x768,
Menu1_WindowUniformScale, Menu1_WindowUniformScale,
Menu1_AlternativeRender, Menu1_AlternativeRender,
Menu1_Language, Menu1_Language,
Menu1_LanguageMax, Menu1_LanguageMax,
Menu1_Game, Menu1_Game,
Menu1_Options, Menu1_Options,
Menu1_Select_Players, Menu1_Select_Players,
Menu1_Table_Resolution, Menu1_Table_Resolution,
Menu1_Window, Menu1_Window,
Menu1_Help, Menu1_Help,
Menu1_UseMaxResolution_640x480, Menu1_UseMaxResolution_640x480,
Menu1_UseMaxResolution_800x600, Menu1_UseMaxResolution_800x600,
Menu1_UseMaxResolution_1024x768, Menu1_UseMaxResolution_1024x768,
NUMBER, NUMBER,
};
enum class lang
{
Arabic,
Czech,
Danish,
German,
Greek,
English,
Spanish,
Finnish,
French,
Hebrew,
Hungarian,
Italian,
Japanese,
Korean,
Norwegian,
Dutch,
Polish,
BrazilianPortuguese,
Portuguese,
Russian,
Swedish,
Turkish,
SimplifiedChinese,
TraditionalChinese,
NUMBER
};
template <typename Key, typename Value, int N>
struct InitializedArray
{
static_assert(std::is_enum<Key>::value, "Key is not an enum");
InitializedArray() : Store{}
{
}
InitializedArray(const std::initializer_list<std::pair<Key, Value>>& iList)
{
Store.reserve(iList.size());
for (const auto& pair : iList)
{
size_t index = static_cast<int>(pair.first);
if (Store.size() <= index)
Store.resize(index + 1);
Store[index] = pair.second;
}
}
bool contains(Key index) const
{
return Store.size() > static_cast<int>(index);
}
const Value& operator[](Key index) const
{
return Store[static_cast<int>(index)];
}
const Value* data() const
{
return Store.data();
}
size_t size() const
{
return Store.size();
}
private:
std::vector<Value> Store;
}; };
struct languageInfo struct languageInfo
{ {
const char* short_name; const char* short_name;
const char* display_name; const char* display_name;
}; };
class translations { class translations
{
public: public:
static const languageInfo* get_languages(size_t* languages_number); static const languageInfo* get_languages(size_t* languages_number);
static const char* get_translation(Msg id); static const char* get_translation(Msg id);
static void set_current_language(const char* short_name); static void set_current_language(const char* short_name);
static const languageInfo* get_current_language(); static const languageInfo* get_current_language();
static void get_glyph_range(ImVector<ImWchar>* ranges); static void get_glyph_range(ImVector<ImWchar>* ranges);
private:
static const InitializedArray<
Msg,
InitializedArray<
lang,
const char*,
static_cast<int>(lang::NUMBER)
>,
static_cast<int>(Msg::NUMBER)
> translated_strings;
static const InitializedArray<
lang,
languageInfo,
(int)lang::NUMBER
> languages;
static lang current_language;
}; };