diff options
author | Tom Sepez <tsepez@chromium.org> | 2017-04-18 16:36:11 -0700 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-04-18 23:53:20 +0000 |
commit | 5af27b63bf94e7f60212f6759c8342ce02da5ad2 (patch) | |
tree | ad5c42c2632b521b98cc7058cd00d345fb2a5756 /xfa/fxfa | |
parent | 3420ba852babe24c7b03fede1b3b7c474c148c0d (diff) | |
download | pdfium-5af27b63bf94e7f60212f6759c8342ce02da5ad2.tar.xz |
Remove hand-written bsearch from XFA_GetAttributeEnumByName()
Change-Id: Ic4bf34dfbdd06971d8935d031bdb7996c78d262f
Reviewed-on: https://pdfium-review.googlesource.com/4315
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'xfa/fxfa')
-rw-r--r-- | xfa/fxfa/parser/xfa_utils.cpp | 19 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_utils_unittest.cpp | 13 |
2 files changed, 18 insertions, 14 deletions
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp index 75d017b070..2ffba9b2e6 100644 --- a/xfa/fxfa/parser/xfa_utils.cpp +++ b/xfa/fxfa/parser/xfa_utils.cpp @@ -455,19 +455,12 @@ const XFA_ATTRIBUTEENUMINFO* XFA_GetAttributeEnumByName( if (wsName.IsEmpty()) return nullptr; - uint32_t uHash = FX_HashCode_GetW(wsName, false); - int32_t iStart = 0; - int32_t iEnd = g_iXFAEnumCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_ATTRIBUTEENUMINFO* pInfo = g_XFAEnumData + iMid; - if (uHash == pInfo->uHash) - return pInfo; - if (uHash < pInfo->uHash) - iEnd = iMid - 1; - else - iStart = iMid + 1; - } while (iStart <= iEnd); + auto* it = std::lower_bound(g_XFAEnumData, g_XFAEnumData + g_iXFAEnumCount, + FX_HashCode_GetW(wsName, false), + [](const XFA_ATTRIBUTEENUMINFO& arg, + uint32_t hash) { return arg.uHash < hash; }); + if (it != g_XFAEnumData + g_iXFAEnumCount && wsName == it->pName) + return it; return nullptr; } diff --git a/xfa/fxfa/parser/xfa_utils_unittest.cpp b/xfa/fxfa/parser/xfa_utils_unittest.cpp index 1898a797ec..6a1de85624 100644 --- a/xfa/fxfa/parser/xfa_utils_unittest.cpp +++ b/xfa/fxfa/parser/xfa_utils_unittest.cpp @@ -276,9 +276,20 @@ TEST_F(XFANodeIteratorTest, ChildAsRootNext) { TEST(XFAUtilsTest, GetAttributeByName) { EXPECT_EQ(nullptr, XFA_GetAttributeByName(L"")); - EXPECT_EQ(nullptr, XFA_GetAttributeByName(L"clams")); + EXPECT_EQ(nullptr, XFA_GetAttributeByName(L"nonesuch")); EXPECT_EQ(XFA_ATTRIBUTE_H, XFA_GetAttributeByName(L"h")->eName); EXPECT_EQ(XFA_ATTRIBUTE_Short, XFA_GetAttributeByName(L"short")->eName); EXPECT_EQ(XFA_ATTRIBUTE_DecipherOnly, XFA_GetAttributeByName(L"decipherOnly")->eName); } + +TEST(XFAUtilsTest, GetAttributeEnumByName) { + EXPECT_EQ(nullptr, XFA_GetAttributeEnumByName(L"")); + EXPECT_EQ(nullptr, XFA_GetAttributeEnumByName(L"nonesuch")); + EXPECT_EQ(XFA_ATTRIBUTEENUM_Asterisk, + XFA_GetAttributeEnumByName(L"*")->eName); + EXPECT_EQ(XFA_ATTRIBUTEENUM_Visible, + XFA_GetAttributeEnumByName(L"visible")->eName); + EXPECT_EQ(XFA_ATTRIBUTEENUM_Lowered, + XFA_GetAttributeEnumByName(L"lowered")->eName); +} |