Skip to content

Commit 7b5d83c

Browse files
kojiishihiroyuki-komatsu
authored andcommitted
Change DateRewriter::EraToAd to return std::vector
This patch has no behavior changes. PiperOrigin-RevId: 622213571
1 parent a4e4ce6 commit 7b5d83c

File tree

3 files changed

+94
-113
lines changed

3 files changed

+94
-113
lines changed

Diff for: src/rewriter/date_rewriter.cc

+27-31
Original file line numberDiff line numberDiff line change
@@ -588,15 +588,14 @@ bool ExtractYearFromKey(const YearData &year_data, const absl::string_view key,
588588
return true;
589589
}
590590

591-
bool EraToAdForCourt(const YearData *data, size_t size,
591+
void EraToAdForCourt(const YearData *data, size_t size,
592592
const absl::string_view key,
593-
std::vector<std::string> *results,
594-
std::vector<std::string> *descriptions) {
593+
std::vector<std::pair<std::string, std::string>>
594+
&results_and_descriptions) {
595595
if (!absl::EndsWith(key, kNenKey)) {
596-
return false;
596+
return;
597597
}
598598

599-
bool modified = false;
600599
for (size_t i = 0; i < size; ++i) {
601600
const YearData &year_data = data[i];
602601
if (!absl::StartsWith(key, year_data.key)) {
@@ -624,15 +623,16 @@ bool EraToAdForCourt(const YearData *data, size_t size,
624623
for (size_t j = 0; j < output.size(); ++j) {
625624
// "元徳", "建武" and "明徳" require dedupe
626625
std::string value = absl::StrCat(output[j].value, kNenValue);
627-
if (absl::c_find(*results, value) != results->end()) {
626+
if (absl::c_find_if(results_and_descriptions,
627+
[&value](const std::pair<std::string, std::string>
628+
&result_and_description) {
629+
return result_and_description.first == value;
630+
}) != results_and_descriptions.end()) {
628631
continue;
629632
}
630-
results->push_back(std::move(value));
631-
descriptions->push_back(description);
633+
results_and_descriptions.push_back({std::move(value), description});
632634
}
633-
modified = true;
634635
}
635-
return modified;
636636
}
637637

638638
// Checks if the given date is valid or not.
@@ -785,16 +785,14 @@ std::vector<std::string> DateRewriter::AdToEra(int year, int month) {
785785
return results;
786786
}
787787

788-
bool DateRewriter::EraToAd(const absl::string_view key,
789-
std::vector<std::string> *results,
790-
std::vector<std::string> *descriptions) {
791-
bool ret = false;
788+
std::vector<std::pair<std::string, std::string>> DateRewriter::EraToAd(
789+
const absl::string_view key) {
790+
std::vector<std::pair<std::string, std::string>> results_and_descriptions;
792791
// The order is south to north, older to newer
793-
ret |= EraToAdForCourt(kEraData, std::size(kEraData), key, results,
794-
descriptions);
795-
ret |= EraToAdForCourt(kNorthEraData, std::size(kNorthEraData), key, results,
796-
descriptions);
797-
return ret;
792+
EraToAdForCourt(kEraData, std::size(kEraData), key, results_and_descriptions);
793+
EraToAdForCourt(kNorthEraData, std::size(kNorthEraData), key,
794+
results_and_descriptions);
795+
return results_and_descriptions;
798796
}
799797

800798
bool DateRewriter::ConvertTime(uint32_t hour, uint32_t min,
@@ -1067,19 +1065,18 @@ bool DateRewriter::RewriteAd(Segment *segment) {
10671065
}
10681066

10691067
// Try to convert era to AD.
1070-
std::vector<std::string> results, descriptions;
1071-
EraToAd(key, &results, &descriptions);
1072-
DCHECK_EQ(results.size(), descriptions.size());
1073-
if (results.empty()) {
1068+
const std::vector<std::pair<std::string, std::string>>
1069+
results_anddescriptions = EraToAd(key);
1070+
if (results_anddescriptions.empty()) {
10741071
return false;
10751072
}
10761073

10771074
const Segment::Candidate &base_cand = segment->candidate(0);
10781075
std::vector<std::unique_ptr<Segment::Candidate>> candidates;
1079-
candidates.reserve(results.size());
1080-
for (size_t i = 0; i < results.size(); ++i) {
1081-
candidates.push_back(CreateCandidate(base_cand, std::move(results[i]),
1082-
std::move(descriptions[i])));
1076+
candidates.reserve(results_anddescriptions.size());
1077+
for (auto &[result, description] : results_anddescriptions) {
1078+
candidates.push_back(
1079+
CreateCandidate(base_cand, std::move(result), std::move(description)));
10831080
}
10841081

10851082
// Insert position is the last of candidates
@@ -1143,10 +1140,9 @@ bool DateRewriter::ResizeSegmentsForRewriteAd(
11431140
DCHECK(!key.empty());
11441141

11451142
// Try to convert era to AD.
1146-
std::vector<std::string> results, descriptions;
1147-
EraToAd(key, &results, &descriptions);
1148-
DCHECK_EQ(results.size(), descriptions.size());
1149-
if (results.empty()) {
1143+
const std::vector<std::pair<std::string, std::string>>
1144+
results_anddescriptions = EraToAd(key);
1145+
if (results_anddescriptions.empty()) {
11501146
return false;
11511147
}
11521148

Diff for: src/rewriter/date_rewriter.h

+9-10
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,18 @@ class DateRewriter : public RewriterInterface {
9191

9292
// Converts AD to Japanese ERA.
9393
// If given string is invalid, this function does not nothing and
94-
// returns false
94+
// returns an empty vector.
9595
// The results will have multiple variants.
9696
// e.g.)
97-
// key -> results, descriptions
97+
// key -> list of result and description
9898
// -----------------------------------------------
99-
// "へいせい20ねん" -> {"2008年", "2008年", "二〇〇八年"},
100-
// {"平成20年", "平成20年", "平成20年"}
101-
// "しょうわ2ねん" -> {"1927年", "1927年", "一九二七年",
102-
// "1313年", "1313年", "一三一三年" },
103-
// {"昭和2年", "昭和2年", "昭和2年",
104-
// "正和2年", "正和2年", "正和2年"}
105-
static bool EraToAd(absl::string_view key, std::vector<std::string> *results,
106-
std::vector<std::string> *descriptions);
99+
// "へいせい20ねん" -> {{"2008年", "平成20年"}, {"2008年", "平成20年"},
100+
// {"二〇〇八年", "平成20年"}}
101+
// "しょうわ2ねん" -> {{"1927年", "昭和2年"}, {"1927年", "昭和2年"},
102+
// {"一九二七年", "昭和2年"}, {"1313年", "正和2年"},
103+
// {"1313年", "正和2年"}, {"一三一三年", "正和2年"}}
104+
static std::vector<std::pair<std::string, std::string>> EraToAd(
105+
absl::string_view key);
107106

108107
// Converts given time to string expression.
109108
// If given time information is invalid, this function does nothing and

Diff for: src/rewriter/date_rewriter_test.cc

+58-72
Original file line numberDiff line numberDiff line change
@@ -386,110 +386,96 @@ TEST_F(DateRewriterTest, ADToERA) {
386386
}
387387

388388
TEST_F(DateRewriterTest, ERAToAD) {
389-
std::vector<std::string> results, descriptions;
389+
#define PAIR_STR(a, b) std::make_pair(std::string(a), std::string(b))
390390

391-
EXPECT_FALSE(DateRewriter::EraToAd("", &results, &descriptions));
391+
EXPECT_TRUE(DateRewriter::EraToAd("").empty());
392392

393393
// "たいか1ねん" is "645年" or "645年" or "六四五年"
394-
results.clear();
395-
descriptions.clear();
396-
EXPECT_TRUE(DateRewriter::EraToAd("たいか1ねん", &results, &descriptions));
397-
EXPECT_THAT(results, ElementsAre("六四五年", "645年", "645年"));
398-
EXPECT_THAT(descriptions, Each("大化1年"));
394+
EXPECT_THAT(DateRewriter::EraToAd("たいか1ねん"),
395+
ElementsAre(PAIR_STR("六四五年", "大化1年"),
396+
PAIR_STR("645年", "大化1年"),
397+
PAIR_STR("645年", "大化1年")));
399398

400399
// "たいか2ねん" is "646年" or "646年" or "六四六年"
401-
results.clear();
402-
descriptions.clear();
403-
EXPECT_TRUE(DateRewriter::EraToAd("たいか2ねん", &results, &descriptions));
404-
EXPECT_THAT(results, ElementsAre("六四六年", "646年", "646年"));
405-
EXPECT_THAT(descriptions, Each("大化2年"));
400+
EXPECT_THAT(DateRewriter::EraToAd("たいか2ねん"),
401+
ElementsAre(PAIR_STR("六四六年", "大化2年"),
402+
PAIR_STR("646年", "大化2年"),
403+
PAIR_STR("646年", "大化2年")));
406404

407405
// "しょうわ2ねん" is AD.1313 or AD.1927
408406
// "1313年", "1313年", "一三一三年"
409407
// "1927年", "1927年", "一九二七年"
410-
results.clear();
411-
descriptions.clear();
412-
EXPECT_TRUE(DateRewriter::EraToAd("しょうわ2ねん", &results, &descriptions));
413-
EXPECT_THAT(results, ElementsAre("一三一三年", "1313年", "1313年",
414-
"一九二七年", "1927年", "1927年"));
415-
EXPECT_THAT(descriptions, ElementsAre("正和2年", "正和2年", "正和2年",
416-
"昭和2年", "昭和2年", "昭和2年"));
408+
EXPECT_THAT(
409+
DateRewriter::EraToAd("しょうわ2ねん"),
410+
ElementsAre(
411+
PAIR_STR("一三一三年", "正和2年"), PAIR_STR("1313年", "正和2年"),
412+
PAIR_STR("1313年", "正和2年"), PAIR_STR("一九二七年", "昭和2年"),
413+
PAIR_STR("1927年", "昭和2年"), PAIR_STR("1927年", "昭和2年")));
417414

418415
// North court test
419416
// "げんとく1ねん" is AD.1329
420-
results.clear();
421-
descriptions.clear();
422-
EXPECT_TRUE(DateRewriter::EraToAd("げんとく1ねん", &results, &descriptions));
423-
EXPECT_THAT(results, ElementsAre("一三二九年", "1329年", "1329年"));
424-
EXPECT_THAT(descriptions, Each("元徳1年"));
417+
EXPECT_THAT(DateRewriter::EraToAd("げんとく1ねん"),
418+
ElementsAre(PAIR_STR("一三二九年", "元徳1年"),
419+
PAIR_STR("1329年", "元徳1年"),
420+
PAIR_STR("1329年", "元徳1年")));
425421

426422
// "めいとく3ねん" is AD.1392
427-
results.clear();
428-
descriptions.clear();
429-
EXPECT_TRUE(DateRewriter::EraToAd("めいとく3ねん", &results, &descriptions));
430-
EXPECT_THAT(results, ElementsAre("一三九二年", "1392年", "1392年"));
431-
EXPECT_THAT(descriptions, Each("明徳3年"));
423+
EXPECT_THAT(DateRewriter::EraToAd("めいとく3ねん"),
424+
ElementsAre(PAIR_STR("一三九二年", "明徳3年"),
425+
PAIR_STR("1392年", "明徳3年"),
426+
PAIR_STR("1392年", "明徳3年")));
432427

433428
// "けんむ1ねん" is AD.1334 (requires dedupe)
434-
results.clear();
435-
descriptions.clear();
436-
EXPECT_TRUE(DateRewriter::EraToAd("けんむ1ねん", &results, &descriptions));
437-
EXPECT_THAT(results, ElementsAre("一三三四年", "1334年", "1334年"));
438-
EXPECT_THAT(descriptions, Each("建武1年"));
429+
EXPECT_THAT(DateRewriter::EraToAd("けんむ1ねん"),
430+
ElementsAre(PAIR_STR("一三三四年", "建武1年"),
431+
PAIR_STR("1334年", "建武1年"),
432+
PAIR_STR("1334年", "建武1年")));
439433

440434
// Big number test
441435
// "昭和80年" is AD.2005
442-
results.clear();
443-
descriptions.clear();
444-
EXPECT_TRUE(DateRewriter::EraToAd("しょうわ80ねん", &results, &descriptions));
445-
EXPECT_THAT(results, ElementsAre("一三九一年", "1391年", "1391年",
446-
"二〇〇五年", "2005年", "2005年"));
447-
EXPECT_THAT(descriptions, ElementsAre("正和80年", "正和80年", "正和80年",
448-
"昭和80年", "昭和80年", "昭和80年"));
436+
EXPECT_THAT(DateRewriter::EraToAd("しょうわ80ねん"),
437+
ElementsAre(PAIR_STR("一三九一年", "正和80年"),
438+
PAIR_STR("1391年", "正和80年"),
439+
PAIR_STR("1391年", "正和80年"),
440+
PAIR_STR("二〇〇五年", "昭和80年"),
441+
PAIR_STR("2005年", "昭和80年"),
442+
PAIR_STR("2005年", "昭和80年")));
449443

450444
// "大正101年" is AD.2012
451-
results.clear();
452-
descriptions.clear();
453-
EXPECT_TRUE(
454-
DateRewriter::EraToAd("たいしょう101ねん", &results, &descriptions));
455-
EXPECT_THAT(results, ElementsAre("二〇一二年", "2012年", "2012年"));
456-
EXPECT_THAT(descriptions, Each("大正101年"));
445+
EXPECT_THAT(DateRewriter::EraToAd("たいしょう101ねん"),
446+
ElementsAre(PAIR_STR("二〇一二年", "大正101年"),
447+
PAIR_STR("2012年", "大正101年"),
448+
PAIR_STR("2012年", "大正101年")));
457449

458450
// "元年" test
459451
// "れいわがんねん" is AD.2019
460-
results.clear();
461-
descriptions.clear();
462-
EXPECT_TRUE(DateRewriter::EraToAd("れいわがんねん", &results, &descriptions));
463-
EXPECT_THAT(results, ElementsAre("二〇一九年", "2019年", "2019年"));
464-
EXPECT_THAT(descriptions, Each("令和元年"));
452+
EXPECT_THAT(DateRewriter::EraToAd("れいわがんねん"),
453+
ElementsAre(PAIR_STR("二〇一九年", "令和元年"),
454+
PAIR_STR("2019年", "令和元年"),
455+
PAIR_STR("2019年", "令和元年")));
465456

466457
// "元年" test
467458
// "へいせいがんねん" is AD.1989
468-
results.clear();
469-
descriptions.clear();
470-
EXPECT_TRUE(
471-
DateRewriter::EraToAd("へいせいがんねん", &results, &descriptions));
472-
EXPECT_THAT(results, ElementsAre("一九八九年", "1989年", "1989年"));
473-
EXPECT_THAT(descriptions, Each("平成元年"));
459+
EXPECT_THAT(DateRewriter::EraToAd("へいせいがんねん"),
460+
ElementsAre(PAIR_STR("一九八九年", "平成元年"),
461+
PAIR_STR("1989年", "平成元年"),
462+
PAIR_STR("1989年", "平成元年")));
474463

475464
// "しょうわがんねん" is AD.1926 or AD.1312
476-
results.clear();
477-
descriptions.clear();
478-
EXPECT_TRUE(
479-
DateRewriter::EraToAd("しょうわがんねん", &results, &descriptions));
480-
EXPECT_THAT(results, ElementsAre("一三一二年", "1312年", "1312年",
481-
"一九二六年", "1926年", "1926年"));
482-
EXPECT_THAT(descriptions, ElementsAre("正和元年", "正和元年", "正和元年",
483-
"昭和元年", "昭和元年", "昭和元年"));
465+
EXPECT_THAT(DateRewriter::EraToAd("しょうわがんねん"),
466+
ElementsAre(PAIR_STR("一三一二年", "正和元年"),
467+
PAIR_STR("1312年", "正和元年"),
468+
PAIR_STR("1312年", "正和元年"),
469+
PAIR_STR("一九二六年", "昭和元年"),
470+
PAIR_STR("1926年", "昭和元年"),
471+
PAIR_STR("1926年", "昭和元年")));
484472

485473
// Negative Test
486474
// 0 or negative number input are expected false return
487-
results.clear();
488-
descriptions.clear();
489-
EXPECT_FALSE(
490-
DateRewriter::EraToAd("しょうわ-1ねん", &results, &descriptions));
491-
EXPECT_FALSE(DateRewriter::EraToAd("しょうわ0ねん", &results, &descriptions));
492-
EXPECT_FALSE(DateRewriter::EraToAd("0ねん", &results, &descriptions));
475+
EXPECT_TRUE(DateRewriter::EraToAd("しょうわ-1ねん").empty());
476+
EXPECT_TRUE(DateRewriter::EraToAd("しょうわ0ねん").empty());
477+
EXPECT_TRUE(DateRewriter::EraToAd("0ねん").empty());
478+
#undef PAIR_STR
493479
}
494480

495481
TEST_F(DateRewriterTest, ConvertTime) {

0 commit comments

Comments
 (0)