Fix some nits in fx_unicode.cpp. - Remove an extra dummy element in |kFXTextLayoutBidiMirror|. - Replace a 0x1ff value with |kMirrorMax|. - Use |kMirrorMax| in FX_GetMirrorChar() and remove |kMirrorBitMask|. - Change a check to an assert in FX_GetMirrorChar(). - Use constexpr in more places. Change-Id: I9b89d20cb4e663467842ee39db5a8c46a7d46c71 Reviewed-on: https://pdfium-review.googlesource.com/c/48196 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/fx_unicode.cpp b/core/fxcrt/fx_unicode.cpp index 2b49ea2..2aa33d4 100644 --- a/core/fxcrt/fx_unicode.cpp +++ b/core/fxcrt/fx_unicode.cpp
@@ -18,19 +18,18 @@ constexpr uint16_t kMirrorBitPos = 5; constexpr uint16_t kMirrorBitCount = 9; -constexpr uint16_t kMirrorBitMask = - (((1 << kMirrorBitCount) - 1) << kMirrorBitPos); +constexpr uint16_t kMirrorMax = (1 << kMirrorBitCount) - 1; #undef CHARPROP____ #define CHARPROP____(mirror, ct, bd, bt) \ ((mirror << kMirrorBitPos) | \ (static_cast<uint16_t>(FX_BIDICLASS::bd) << kBidiClassBitPos)), -const uint16_t kTextLayoutCodeProperties[] = { +constexpr uint16_t kTextLayoutCodeProperties[] = { #include "core/fxcrt/fx_ucddata.inc" }; #undef CHARPROP____ -const size_t kTextLayoutCodePropertiesSize = +constexpr size_t kTextLayoutCodePropertiesSize = FX_ArraySize(kTextLayoutCodeProperties); static_assert(kTextLayoutCodePropertiesSize == 65536, "missing characters"); @@ -58,12 +57,12 @@ #define CHARPROP____(mirror, ct, bd, bt) \ ((static_cast<uint16_t>(FX_CHARTYPE::ct) << kCharTypeBitPos) | \ (static_cast<uint16_t>(FX_BREAKPROPERTY::bt) << kBreakTypeBitPos)), -const uint16_t kExtendedTextLayoutCodeProperties[] = { +constexpr uint16_t kExtendedTextLayoutCodeProperties[] = { #include "core/fxcrt/fx_ucddata.inc" }; #undef CHARPROP____ -const size_t kExtendedTextLayoutCodePropertiesSize = +constexpr size_t kExtendedTextLayoutCodePropertiesSize = FX_ArraySize(kExtendedTextLayoutCodeProperties); static_assert(kExtendedTextLayoutCodePropertiesSize == 65536, @@ -78,7 +77,7 @@ #endif // PDF_ENBABLE_XFA -const uint16_t kFXTextLayoutBidiMirror[] = { +constexpr uint16_t kFXTextLayoutBidiMirror[] = { 0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, 0x00BB, 0x00AB, 0x0F3B, 0x0F3A, 0x0F3D, 0x0F3C, 0x169C, 0x169B, 0x2019, 0x2018, 0x201D, 0x201C, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D, 0x208E, @@ -119,16 +118,16 @@ 0x300C, 0x300F, 0x300E, 0x3011, 0x3010, 0x3015, 0x3014, 0x3017, 0x3016, 0x3019, 0x3018, 0x301B, 0x301A, 0xFE5A, 0xFE59, 0xFE5C, 0xFE5B, 0xFE5E, 0xFE5D, 0xFE65, 0xFE64, 0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B, - 0xFF5D, 0xFF5B, 0xFF60, 0xFF5F, 0xFF63, 0xFF62, 0xFFFF, + 0xFF5D, 0xFF5B, 0xFF60, 0xFF5F, 0xFF63, 0xFF62, }; -const size_t kFXTextLayoutBidiMirrorSize = +constexpr size_t kFXTextLayoutBidiMirrorSize = FX_ArraySize(kFXTextLayoutBidiMirror); // Check that the mirror indicies in the fx_ucddata.inc table are in bounds. #undef CHARPROP____ -#define CHARPROP____(mirror, ct, bd, bt) \ - static_assert(mirror == 0x1ffu || mirror < kFXTextLayoutBidiMirrorSize, \ +#define CHARPROP____(mirror, ct, bd, bt) \ + static_assert(mirror == kMirrorMax || mirror < kFXTextLayoutBidiMirrorSize, \ "Bad mirror index"); #include "core/fxcrt/fx_ucddata.inc" #undef CHARPROP____ @@ -137,11 +136,11 @@ wchar_t FX_GetMirrorChar(wchar_t wch) { uint16_t prop = GetUnicodeProperties(wch); - uint16_t temp = (prop & kMirrorBitMask); - if (temp == kMirrorBitMask) + size_t idx = prop >> kMirrorBitPos; + if (idx == kMirrorMax) return wch; - size_t idx = temp >> kMirrorBitPos; - return idx < kFXTextLayoutBidiMirrorSize ? kFXTextLayoutBidiMirror[idx] : wch; + ASSERT(idx < kFXTextLayoutBidiMirrorSize); + return kFXTextLayoutBidiMirror[idx]; } FX_BIDICLASS FX_GetBidiClass(wchar_t wch) {