From 02ed84a878ba85357417da0e540c253c3591b2d4 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Tue, 29 Sep 2026 09:52:19 +0200 Subject: [PATCH] Remove the eight-digit case of the view's digit parser Since whole blocks of eight digits are read directly, parse_upto8() only gets fewer than eight digits; its eight-digit case was dead code. Signed-off-by: Niels Lohmann --- include/nlohmann/detail/view/scan.hpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/include/nlohmann/detail/view/scan.hpp b/include/nlohmann/detail/view/scan.hpp index d31f3e9fb..6d732ae36 100644 --- a/include/nlohmann/detail/view/scan.hpp +++ b/include/nlohmann/detail/view/scan.hpp @@ -147,16 +147,13 @@ inline std::uint64_t int_pow10(unsigned k) noexcept return table[k]; } -/// value of k <= 8 digits at p in one step if [p, p + 8) lies below limit, -/// else one digit at a time +/// value of 0 < k < 8 digits at p in one step if [p, p + 8) lies below +/// limit, else one digit at a time (whole blocks of eight digits are read by +/// parse_upto19() directly) NLOHMANN_VIEW_ALWAYS_INLINE std::uint64_t parse_upto8(const unsigned char* p, unsigned k, const unsigned char* limit) noexcept { if (NLOHMANN_VIEW_LIKELY(limit - p >= 8)) { - if (k == 8) - { - return parse_eight_digits(read_eight_bytes(p)); - } // move the k digits to the top and pad the vacated low bytes with '0' const unsigned shift = 8 * (8 - k); return parse_eight_digits((read_eight_bytes(p) << shift) | (0x3030303030303030u >> (8 * k)));