Skip to content

Commit 159ad79

Browse files
committed
Use C++20 (fixes openvanilla#252)
This updates all UTF-8 string literal uses since u8 strings are now represented by char8_t which is a distinct type.
1 parent 680e34e commit 159ad79

9 files changed

Lines changed: 80 additions & 67 deletions

File tree

src/Big5Utils/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ project(Big5UtilsLib)
33

44
find_package(ICU COMPONENTS uc REQUIRED)
55

6-
set(CMAKE_CXX_STANDARD 17)
6+
set(CMAKE_CXX_STANDARD 20)
77
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
88

99
add_library(Big5UtilsLib

src/ChineseNumbers/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.10)
22
project(ChineseNumbersLib)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
set(CMAKE_CXX_STANDARD 20)
55
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
66

77
add_library(ChineseNumbersLib

src/Engine/ByteBlockBackedDictionaryTest.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ TEST(ByteBlockBackedDictionaryTest, Simple2) {
4747
}
4848

4949
TEST(ByteBlockBackedDictionaryTest, EncodingAgnostic1) {
50-
constexpr char data[] = u8"smile 😊";
50+
constexpr char8_t data[] = u8"smile 😊";
5151
ByteBlockBackedDictionary dict;
52-
ASSERT_TRUE(dict.parse(data, sizeof(data)));
53-
ASSERT_EQ(dict.getValues("smile").at(0), u8"😊");
52+
ASSERT_TRUE(dict.parse(reinterpret_cast<const char*>(data), sizeof(data)));
53+
ASSERT_EQ(dict.getValues("smile").at(0), reinterpret_cast<const char*>(u8"😊"));
5454
}
5555

5656
TEST(ByteBlockBackedDictionaryTest, EncodingAgnostic2) {

src/Engine/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.10)
22
project(McBopomofoLMLib)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
set(CMAKE_CXX_STANDARD 20)
55
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
66

77
add_subdirectory(gramambular2)

src/Engine/Mandarin/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.10)
22
project(Mandarin)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
set(CMAKE_CXX_STANDARD 20)
55
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
66

77
add_library(MandarinLib Mandarin.h Mandarin.cpp)

src/Engine/Mandarin/Mandarin.cpp

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,8 @@ const BPMF BPMF::FromHanyuPinyin(const std::string& str) {
268268
} else if (PinyinParseHelper::ConsumePrefix(pinyin, "ue")) {
269269
secondComponent = BPMF::UE;
270270
thirdComponent = BPMF::E;
271-
} else if (PinyinParseHelper::ConsumePrefix(pinyin, u8"ü")) {
271+
} else if (PinyinParseHelper::ConsumePrefix(
272+
pinyin, reinterpret_cast<const char*>(u8"ü"))) {
272273
secondComponent = BPMF::UE;
273274
}
274275

@@ -646,47 +647,47 @@ const BopomofoCharacterMap& BopomofoCharacterMap::SharedInstance() {
646647
}
647648

648649
BopomofoCharacterMap::BopomofoCharacterMap() {
649-
characterToComponent[u8""] = BPMF::B;
650-
characterToComponent[u8""] = BPMF::P;
651-
characterToComponent[u8""] = BPMF::M;
652-
characterToComponent[u8""] = BPMF::F;
653-
characterToComponent[u8""] = BPMF::D;
654-
characterToComponent[u8""] = BPMF::T;
655-
characterToComponent[u8""] = BPMF::N;
656-
characterToComponent[u8""] = BPMF::L;
657-
characterToComponent[u8""] = BPMF::K;
658-
characterToComponent[u8""] = BPMF::G;
659-
characterToComponent[u8""] = BPMF::H;
660-
characterToComponent[u8""] = BPMF::J;
661-
characterToComponent[u8""] = BPMF::Q;
662-
characterToComponent[u8""] = BPMF::X;
663-
characterToComponent[u8""] = BPMF::ZH;
664-
characterToComponent[u8""] = BPMF::CH;
665-
characterToComponent[u8""] = BPMF::SH;
666-
characterToComponent[u8""] = BPMF::R;
667-
characterToComponent[u8""] = BPMF::Z;
668-
characterToComponent[u8""] = BPMF::C;
669-
characterToComponent[u8""] = BPMF::S;
670-
characterToComponent[u8""] = BPMF::I;
671-
characterToComponent[u8""] = BPMF::U;
672-
characterToComponent[u8""] = BPMF::UE;
673-
characterToComponent[u8""] = BPMF::A;
674-
characterToComponent[u8""] = BPMF::O;
675-
characterToComponent[u8""] = BPMF::ER;
676-
characterToComponent[u8""] = BPMF::E;
677-
characterToComponent[u8""] = BPMF::AI;
678-
characterToComponent[u8""] = BPMF::EI;
679-
characterToComponent[u8""] = BPMF::AO;
680-
characterToComponent[u8""] = BPMF::OU;
681-
characterToComponent[u8""] = BPMF::AN;
682-
characterToComponent[u8""] = BPMF::EN;
683-
characterToComponent[u8""] = BPMF::ANG;
684-
characterToComponent[u8""] = BPMF::ENG;
685-
characterToComponent[u8""] = BPMF::ERR;
686-
characterToComponent[u8"ˊ"] = BPMF::Tone2;
687-
characterToComponent[u8"ˇ"] = BPMF::Tone3;
688-
characterToComponent[u8"ˋ"] = BPMF::Tone4;
689-
characterToComponent[u8"˙"] = BPMF::Tone5;
650+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::B;
651+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::P;
652+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::M;
653+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::F;
654+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::D;
655+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::T;
656+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::N;
657+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::L;
658+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::K;
659+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::G;
660+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::H;
661+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::J;
662+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::Q;
663+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::X;
664+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::ZH;
665+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::CH;
666+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::SH;
667+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::R;
668+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::Z;
669+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::C;
670+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::S;
671+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::I;
672+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::U;
673+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::UE;
674+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::A;
675+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::O;
676+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::ER;
677+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::E;
678+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::AI;
679+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::EI;
680+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::AO;
681+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::OU;
682+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::AN;
683+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::EN;
684+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::ANG;
685+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::ENG;
686+
characterToComponent[reinterpret_cast<const char*>(u8"")] = BPMF::ERR;
687+
characterToComponent[reinterpret_cast<const char*>(u8"ˊ")] = BPMF::Tone2;
688+
characterToComponent[reinterpret_cast<const char*>(u8"ˇ")] = BPMF::Tone3;
689+
characterToComponent[reinterpret_cast<const char*>(u8"ˋ")] = BPMF::Tone4;
690+
characterToComponent[reinterpret_cast<const char*>(u8"˙")] = BPMF::Tone5;
690691

691692
for (const auto& [character, component] : characterToComponent) {
692693
componentToCharacter[component] = character;

src/Engine/VariantAnnotatorTest.cpp

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
namespace McBopomofo {
2828

29-
constexpr std::string_view kTestVariantsData =
29+
static const char8_t kTestVariantsData[] =
3030
u8"# format org.openvanilla.mcbopomofo.sorted\n"
3131
u8"一-na 一\U000E01E0\n"
3232
u8"一-ㄧ 一\n"
@@ -37,17 +37,20 @@ constexpr std::string_view kTestVariantsData =
3737
u8"個-ㄍㄜˋ 個\n"
3838
u8"個-ㄍㄜ˙ 個\U000E01E1";
3939

40-
constexpr std::string_view kTestPUAData =
40+
static const char8_t kTestPUAData[] =
4141
u8"# format org.openvanilla.mcbopomofo.sorted\n"
4242
u8"ㄍㄚˋ \uF145\n"
4343
u8"ㄧㄚˊ \uF4BB";
4444

4545
static std::unique_ptr<VariantAnnotator> CreateLoadedAnnotator() {
4646
auto annotator = std::make_unique<VariantAnnotator>();
47-
annotator->loadVariantsMap(ParselessPhraseDB::CreateValidatedDB(
48-
kTestVariantsData.data(), kTestVariantsData.length()));
49-
annotator->loadPUAMap(ParselessPhraseDB::CreateValidatedDB(
50-
kTestPUAData.data(), kTestPUAData.length()));
47+
48+
const char* variantsData = reinterpret_cast<const char*>(kTestVariantsData);
49+
const char* puaData = reinterpret_cast<const char*>(kTestPUAData);
50+
annotator->loadVariantsMap(
51+
ParselessPhraseDB::CreateValidatedDB(variantsData, strlen(variantsData)));
52+
annotator->loadPUAMap(
53+
ParselessPhraseDB::CreateValidatedDB(puaData, strlen(puaData)));
5154
EXPECT_TRUE(annotator->loaded());
5255
return annotator;
5356
}
@@ -82,7 +85,8 @@ TEST(VariantAnnotatorTest, SingleCharacterAnnotationWithVariantSelector) {
8285
auto annotator = CreateLoadedAnnotator();
8386
VariantAnnotator::Result result =
8487
annotator->annotateSingleCharacter("", "ㄍㄜ˙");
85-
EXPECT_EQ(result.annotatedString, u8"\U000E01E1");
88+
EXPECT_EQ(result.annotatedString,
89+
reinterpret_cast<const char*>(u8"\U000E01E1"));
8690
EXPECT_TRUE(result.hasVariantSelectors);
8791
EXPECT_FALSE(result.hasPUACodePoints);
8892
}
@@ -91,7 +95,8 @@ TEST(VariantAnnotatorTest, SingleCharacterAnnotationWithVariant0AndPUA) {
9195
auto annotator = CreateLoadedAnnotator();
9296
VariantAnnotator::Result result =
9397
annotator->annotateSingleCharacter("", "ㄍㄚˋ");
94-
EXPECT_EQ(result.annotatedString, u8"\U000E01E0\uF145");
98+
EXPECT_EQ(result.annotatedString,
99+
reinterpret_cast<const char*>(u8"\U000E01E0\uF145"));
95100
EXPECT_TRUE(result.hasVariantSelectors);
96101
EXPECT_TRUE(result.hasPUACodePoints);
97102
}
@@ -100,7 +105,8 @@ TEST(VariantAnnotatorTest, SingleCharacterAnnotationWithVariant0AndNoPUA) {
100105
auto annotator = CreateLoadedAnnotator();
101106
VariantAnnotator::Result result =
102107
annotator->annotateSingleCharacter("", "");
103-
EXPECT_EQ(result.annotatedString, u8"\U000E01E0");
108+
EXPECT_EQ(result.annotatedString,
109+
reinterpret_cast<const char*>(u8"\U000E01E0"));
104110
EXPECT_TRUE(result.hasVariantSelectors);
105111
EXPECT_FALSE(result.hasPUACodePoints);
106112
}
@@ -109,7 +115,7 @@ TEST(VariantAnnotatorTest, SingleCharacterAnnotationWithUnknownCharacter) {
109115
auto annotator = CreateLoadedAnnotator();
110116
VariantAnnotator::Result result =
111117
annotator->annotateSingleCharacter("", "ㄖㄣˊ");
112-
EXPECT_EQ(result.annotatedString, u8"");
118+
EXPECT_EQ(result.annotatedString, reinterpret_cast<const char*>(u8""));
113119
EXPECT_FALSE(result.hasVariantSelectors);
114120
EXPECT_FALSE(result.hasPUACodePoints);
115121
}
@@ -120,15 +126,19 @@ TEST(VariantAnnotatorTest, AnnotateCharacters) {
120126
{"", "", "", "", "", "", ""},
121127
{"ㄍㄜˋ", "ㄖㄣˊ", "ㄧˊ", "ㄍㄜ˙", "ㄖㄣˊ", "", "ㄍㄚˋ"});
122128
EXPECT_EQ(result.annotatedString,
123-
u8"個人一\U000E01E1\U000E01E1人一個\U000E01E0\uF145");
129+
reinterpret_cast<const char*>(
130+
u8"個人一\U000E01E1\U000E01E1人一個\U000E01E0\uF145"));
124131
EXPECT_TRUE(result.hasVariantSelectors);
125132
EXPECT_TRUE(result.hasPUACodePoints);
126133
EXPECT_EQ(result.accumulatedStringLength.size(), 8);
127134
EXPECT_EQ(result.accumulatedStringLength[0], 0);
128-
EXPECT_EQ(result.accumulatedStringLength[1], strlen(u8""));
129-
EXPECT_EQ(result.accumulatedStringLength[3], strlen(u8"個人一\U000E01E1"));
135+
EXPECT_EQ(result.accumulatedStringLength[1],
136+
strlen(reinterpret_cast<const char*>(u8"")));
137+
EXPECT_EQ(result.accumulatedStringLength[3],
138+
strlen(reinterpret_cast<const char*>(u8"個人一\U000E01E1")));
130139
EXPECT_EQ(result.accumulatedStringLength[6],
131-
strlen(u8"個人一\U000E01E1\U000E01E1人一"));
140+
strlen(reinterpret_cast<const char*>(
141+
u8"個人一\U000E01E1\U000E01E1人一")));
132142
EXPECT_EQ(result.accumulatedStringLength[7], result.annotatedString.size());
133143
}
134144

@@ -158,7 +168,8 @@ TEST(VariantAnnotatorTest, AnnotateCharactersWithVariant0AndPUA) {
158168
VariantAnnotator::CombinedResult result = annotator->annotate(
159169
{"", "", "", "", "", "", ""},
160170
{"ㄍㄜˋ", "ㄖㄣˊ", "", "ㄍㄜˋ", "ㄖㄣˊ", "", "ㄍㄚˋ"});
161-
EXPECT_EQ(result.annotatedString, u8"個人一個人一個\U000E01E0\uF145");
171+
EXPECT_EQ(result.annotatedString,
172+
reinterpret_cast<const char*>(u8"個人一個人一個\U000E01E0\uF145"));
162173
EXPECT_TRUE(result.hasVariantSelectors);
163174
EXPECT_TRUE(result.hasPUACodePoints);
164175
}
@@ -168,7 +179,8 @@ TEST(VariantAnnotatorTest, AnnotateCharactersWithVariant0ButNoPUA) {
168179
VariantAnnotator::CombinedResult result = annotator->annotate(
169180
{"", "", "", "", "", "", ""},
170181
{"ㄍㄜˋ", "ㄖㄣˊ", "", "ㄍㄜˋ", "ㄖㄣˊ", "", ""});
171-
EXPECT_EQ(result.annotatedString, u8"個人一個人一個\U000E01E0");
182+
EXPECT_EQ(result.annotatedString,
183+
reinterpret_cast<const char*>(u8"個人一個人一個\U000E01E0"));
172184
EXPECT_TRUE(result.hasVariantSelectors);
173185
EXPECT_FALSE(result.hasPUACodePoints);
174186
}

src/Engine/gramambular2/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.10)
22
project(gramambular2)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
set(CMAKE_CXX_STANDARD 20)
55
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
66

77
add_library(gramambular2_lib language_model.h reading_grid.h reading_grid.cpp)

src/RomanNumbers/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.10)
22
project(RomanNumbersLib)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
set(CMAKE_CXX_STANDARD 20)
55
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
66

77
add_library(RomanNumbersLib

0 commit comments

Comments
 (0)