diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-07-25 23:25:55 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-07-25 23:25:55 +0000 |
commit | 11a6becb837a16972ffda8f94c8fb69ae100f3f4 (patch) | |
tree | 38f7e3508f1ef221eabd62b14665e78437da2d8f /core/fpdfapi/cmaps | |
parent | 91b8302dec04ca4ddc1f91545d192350665580cf (diff) | |
download | pdfium-11a6becb837a16972ffda8f94c8fb69ae100f3f4.tar.xz |
Remove some ASSERT (and cast) in favor of checked cases.
Because it is a stronger pattern at runtime.
These were found by essentially: grep -ni '\bassert\b.*type'
Change-Id: I913d77139053e8980528597a6633e1859e5204c4
Reviewed-on: https://pdfium-review.googlesource.com/38890
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/cmaps')
-rw-r--r-- | core/fpdfapi/cmaps/fpdf_cmaps.cpp | 92 |
1 files changed, 55 insertions, 37 deletions
diff --git a/core/fpdfapi/cmaps/fpdf_cmaps.cpp b/core/fpdfapi/cmaps/fpdf_cmaps.cpp index ad1091910c..630942bde7 100644 --- a/core/fpdfapi/cmaps/fpdf_cmaps.cpp +++ b/core/fpdfapi/cmaps/fpdf_cmaps.cpp @@ -74,31 +74,40 @@ uint16_t FPDFAPI_CIDFromCharCode(const FXCMAP_CMap* pMap, uint32_t charcode) { return 0; } - while (pMap) { - if (!pMap->m_pWordMap) - return 0; - if (pMap->m_WordMapType == FXCMAP_CMap::Single) { - const auto* begin = reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap); - const auto* end = begin + pMap->m_WordCount; - const auto* found = std::lower_bound( - begin, end, loword, [](const SingleCmap& element, uint16_t code) { - return element.code < code; - }); - if (found != end && found->code == loword) - return found->cid; - } else { - ASSERT(pMap->m_WordMapType == FXCMAP_CMap::Range); - const auto* begin = reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap); - const auto* end = begin + pMap->m_WordCount; - const auto* found = std::lower_bound( - begin, end, loword, [](const RangeCmap& element, uint16_t code) { - return element.high < code; - }); - if (found != end && loword >= found->low && loword <= found->high) - return found->cid + loword - found->low; + while (pMap && pMap->m_pWordMap) { + switch (pMap->m_WordMapType) { + case FXCMAP_CMap::Single: { + const auto* begin = + reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap); + const auto* end = begin + pMap->m_WordCount; + const auto* found = std::lower_bound( + begin, end, loword, [](const SingleCmap& element, uint16_t code) { + return element.code < code; + }); + if (found != end && found->code == loword) + return found->cid; + break; + } + case FXCMAP_CMap::Range: { + const auto* begin = + reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap); + const auto* end = begin + pMap->m_WordCount; + const auto* found = std::lower_bound( + begin, end, loword, [](const RangeCmap& element, uint16_t code) { + return element.high < code; + }); + if (found != end && loword >= found->low && loword <= found->high) + return found->cid + loword - found->low; + break; + } + default: { + NOTREACHED(); + break; + } } pMap = FindNextCMap(pMap); } + return 0; } @@ -110,22 +119,31 @@ uint32_t FPDFAPI_CharCodeFromCID(const FXCMAP_CMap* pMap, uint16_t cid) { // second while loop.) ASSERT(pMap); while (pMap) { - if (pMap->m_WordMapType == FXCMAP_CMap::Single) { - const auto* pCur = reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap); - const auto* pEnd = pCur + pMap->m_WordCount; - while (pCur < pEnd) { - if (pCur->cid == cid) - return pCur->code; - ++pCur; + switch (pMap->m_WordMapType) { + case FXCMAP_CMap::Single: { + const auto* pCur = + reinterpret_cast<const SingleCmap*>(pMap->m_pWordMap); + const auto* pEnd = pCur + pMap->m_WordCount; + while (pCur < pEnd) { + if (pCur->cid == cid) + return pCur->code; + ++pCur; + } + break; + } + case FXCMAP_CMap::Range: { + const auto* pCur = reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap); + const auto* pEnd = pCur + pMap->m_WordCount; + while (pCur < pEnd) { + if (cid >= pCur->cid && cid <= pCur->cid + pCur->high - pCur->low) + return pCur->low + cid - pCur->cid; + ++pCur; + } + break; } - } else { - ASSERT(pMap->m_WordMapType == FXCMAP_CMap::Range); - const auto* pCur = reinterpret_cast<const RangeCmap*>(pMap->m_pWordMap); - const auto* pEnd = pCur + pMap->m_WordCount; - while (pCur < pEnd) { - if (cid >= pCur->cid && cid <= pCur->cid + pCur->high - pCur->low) - return pCur->low + cid - pCur->cid; - ++pCur; + default: { + NOTREACHED(); + break; } } pMap = FindNextCMap(pMap); |