Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: core/src/fxge/ge/fx_ge_fontmap.cpp

Issue 1732223002: Use std::lower_bound() in a couple places. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: core/src/fxge/ge/fx_ge_fontmap.cpp
diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp
index b9850f85db810e7afc9638f522ce0d1ffe8a1015..3d8b7a77b3bae605a810463fb31ec63a1fb15a09 100644
--- a/core/src/fxge/ge/fx_ge_fontmap.cpp
+++ b/core/src/fxge/ge/fx_ge_fontmap.cpp
@@ -4,6 +4,7 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+#include <algorithm>
#include <limits>
#include <vector>
@@ -205,9 +206,9 @@ const struct CHARSET_MAP {
{128, 932}, {134, 936}, {129, 949}, {136, 950}, {238, 1250},
{204, 1251}, {0, 1252}, {161, 1253}, {162, 1254}, {177, 1255},
{178, 1256}, {186, 1257}, {163, 1258}, {130, 1361}, {77, 10000},
- {78, 10001}, {79, 10003}, {80, 10008}, {81, 10002}, {83, 10005},
- {84, 10004}, {85, 10006}, {86, 10081}, {87, 10021}, {88, 10029},
- {89, 10007},
+ {78, 10001}, {81, 10002}, {79, 10003}, {84, 10004}, {83, 10005},
Lei Zhang 2016/02/25 20:11:27 Uhh, these weren't sorted by |codepage| value.
Tom Sepez 2016/02/25 20:32:53 But they were sorted by the wrong index value due
Lei Zhang 2016/02/25 20:48:16 No they weren't sorted by |charset| either.
+ {85, 10006}, {89, 10007}, {80, 10008}, {87, 10021}, {88, 10029},
+ {86, 10081},
};
const FX_DWORD kTableNAME = FXDWORD_GET_MSBFIRST("name");
@@ -281,21 +282,15 @@ CFX_ByteString FPDF_LoadTableFromTT(FXSYS_FILE* pFile,
}
uint8_t GetCharsetFromCodePage(FX_WORD codepage) {
- int32_t iEnd = sizeof(g_Codepage2CharsetTable) / sizeof(CHARSET_MAP) - 1;
- FXSYS_assert(iEnd >= 0);
- int32_t iStart = 0, iMid;
- do {
- iMid = (iStart + iEnd) / 2;
- const CHARSET_MAP& cp = g_Codepage2CharsetTable[iMid];
- if (codepage == cp.codepage) {
- return cp.charset;
- }
- if (codepage < cp.codepage) {
- iEnd = iMid - 1;
- } else {
- iStart = iMid + 1;
- }
- } while (iStart <= iEnd);
+ const CHARSET_MAP* pEnd =
+ g_Codepage2CharsetTable + FX_ArraySize(g_Codepage2CharsetTable);
+ const CHARSET_MAP* pCharmap =
+ std::lower_bound(g_Codepage2CharsetTable, pEnd, codepage,
Tom Sepez 2016/02/25 20:32:53 std::binary_search() for an exact hit and avoid th
Lei Zhang 2016/02/25 20:48:16 std::binary_search() returns a bool, not an iterat
Tom Sepez 2016/02/25 22:20:13 Ah, Carry on.
+ [](const CHARSET_MAP& charset, FX_WORD page) {
+ return charset.codepage < page;
+ });
+ if (pCharmap < pEnd && codepage == pCharmap->codepage)
+ return pCharmap->charset;
return 1;
}
« no previous file with comments | « no previous file | xfa/src/fgas/src/localization/fx_locale.cpp » ('j') | xfa/src/fgas/src/localization/fx_locale.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698