Avoid some copies in CPDF_TextPage::AddCharInfoBy*()
Instead of always copying the char info structure at the start of the
methods, only copy later when needed. Also give the copy a better name.
Change-Id: Ic41b563ec5348dced39d30641ba87ca0403a3b3f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/133570
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 204def4..dbc3053 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -781,48 +781,50 @@
void CPDF_TextPage::AddCharInfoByLRDirection(wchar_t wChar,
const CharInfo& info) {
- CharInfo info2 = info;
- if (IsControlChar(info2)) {
- char_list_.push_back(info2);
+ if (IsControlChar(info)) {
+ char_list_.push_back(info);
return;
}
+
DataVector<wchar_t> normalized;
if (wChar >= 0xFB00 && wChar <= 0xFB06) {
normalized = GetUnicodeNormalization(wChar);
}
if (normalized.empty()) {
text_buf_.AppendChar(wChar);
- char_list_.push_back(info2);
+ char_list_.push_back(info);
return;
}
- info2.set_char_type(CharType::kPiece);
+ CharInfo modified_info = info;
+ modified_info.set_char_type(CharType::kPiece);
for (wchar_t normalized_char : normalized) {
- info2.set_unicode(normalized_char);
+ modified_info.set_unicode(normalized_char);
text_buf_.AppendChar(normalized_char);
- char_list_.push_back(info2);
+ char_list_.push_back(modified_info);
}
}
void CPDF_TextPage::AddCharInfoByRLDirection(wchar_t wChar,
const CharInfo& info) {
- CharInfo info2 = info;
- if (IsControlChar(info2)) {
- char_list_.push_back(info2);
+ if (IsControlChar(info)) {
+ char_list_.push_back(info);
return;
}
+
+ CharInfo modified_info = info;
wChar = pdfium::unicode::GetMirrorChar(wChar);
DataVector<wchar_t> normalized = GetUnicodeNormalization(wChar);
if (normalized.empty()) {
- info2.set_unicode(wChar);
+ modified_info.set_unicode(wChar);
text_buf_.AppendChar(wChar);
- char_list_.push_back(info2);
+ char_list_.push_back(modified_info);
return;
}
- info2.set_char_type(CharType::kPiece);
+ modified_info.set_char_type(CharType::kPiece);
for (wchar_t normalized_char : normalized) {
- info2.set_unicode(normalized_char);
+ modified_info.set_unicode(normalized_char);
text_buf_.AppendChar(normalized_char);
- char_list_.push_back(info2);
+ char_list_.push_back(modified_info);
}
}