gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd2] 04/21: xdigittovalue(): optimised.


From: Admin
Subject: [libmicrohttpd2] 04/21: xdigittovalue(): optimised.
Date: Fri, 13 Jun 2025 23:38:12 +0200

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd2.

commit 514dca2e6c7867b17cf4541f02e39e456e6b5758
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
AuthorDate: Wed Jun 11 17:37:58 2025 +0200

    xdigittovalue(): optimised.
    
    Improved performance of the "fast code" version.
    Improved both performance and the size of the "compact code" version.
    
    Can be backported.
---
 src/mhd2/mhd_str.c | 583 ++++++++++++++++++++++++-----------------------------
 1 file changed, 268 insertions(+), 315 deletions(-)

diff --git a/src/mhd2/mhd_str.c b/src/mhd2/mhd_str.c
index dd3b5c0..7935135 100644
--- a/src/mhd2/mhd_str.c
+++ b/src/mhd2/mhd_str.c
@@ -209,323 +209,276 @@ todigitvalue (char c)
 MHD_static_inline_ int
 xdigittovalue (char c)
 {
+  const unsigned char uc = (unsigned char) c; /* Force unsigned value */
 #if ! defined(MHD_FAVOR_SMALL_CODE)
-  switch ((unsigned char) c)
-  {
-#if 0 /* Disabled to give the compiler a hint about low probability */
-  case 0x00U:    /* NUL */
-  case 0x01U:    /* SOH */
-  case 0x02U:    /* STX */
-  case 0x03U:    /* ETX */
-  case 0x04U:    /* EOT */
-  case 0x05U:    /* ENQ */
-  case 0x06U:    /* ACK */
-  case 0x07U:    /* BEL */
-  case 0x08U:    /* BS */
-  case 0x09U:    /* HT */
-  case 0x0AU:    /* LF */
-  case 0x0BU:    /* VT */
-  case 0x0CU:    /* FF */
-  case 0x0DU:    /* CR */
-  case 0x0EU:    /* SO */
-  case 0x0FU:    /* SI */
-  case 0x10U:    /* DLE */
-  case 0x11U:    /* DC1 */
-  case 0x12U:    /* DC2 */
-  case 0x13U:    /* DC3 */
-  case 0x14U:    /* DC4 */
-  case 0x15U:    /* NAK */
-  case 0x16U:    /* SYN */
-  case 0x17U:    /* ETB */
-  case 0x18U:    /* CAN */
-  case 0x19U:    /* EM */
-  case 0x1AU:    /* SUB */
-  case 0x1BU:    /* ESC */
-  case 0x1CU:    /* FS */
-  case 0x1DU:    /* GS */
-  case 0x1EU:    /* RS */
-  case 0x1FU:    /* US */
-  case 0x20U:    /* ' ' */
-  case 0x21U:    /* '!' */
-  case 0x22U:    /* '"' */
-  case 0x23U:    /* '#' */
-  case 0x24U:    /* '$' */
-  case 0x25U:    /* '%' */
-  case 0x26U:    /* '&' */
-  case 0x27U:    /* '\'' */
-  case 0x28U:    /* '(' */
-  case 0x29U:    /* ')' */
-  case 0x2AU:    /* '*' */
-  case 0x2BU:    /* '+' */
-  case 0x2CU:    /* ',' */
-  case 0x2DU:    /* '-' */
-  case 0x2EU:    /* '.' */
-  case 0x2FU:    /* '/' */
-    return -1;
-#endif
-  case 0x30U: /* '0' */
-    return 0;
-  case 0x31U: /* '1' */
-    return 1;
-  case 0x32U: /* '2' */
-    return 2;
-  case 0x33U: /* '3' */
-    return 3;
-  case 0x34U: /* '4' */
-    return 4;
-  case 0x35U: /* '5' */
-    return 5;
-  case 0x36U: /* '6' */
-    return 6;
-  case 0x37U: /* '7' */
-    return 7;
-  case 0x38U: /* '8' */
-    return 8;
-  case 0x39U: /* '9' */
-    return 9;
-#if 0         /* Disabled to give the compiler a hint about low probability */
-  case 0x3AU: /* ':' */
-  case 0x3BU: /* ';' */
-  case 0x3CU: /* '<' */
-  case 0x3DU: /* '=' */
-  case 0x3EU: /* '>' */
-  case 0x3FU: /* '?' */
-  case 0x40U: /* '@' */
-    return -1;
-#endif
-  case 0x41U: /* 'A' */
-    return 0xAU;
-  case 0x42U: /* 'B' */
-    return 0xBU;
-  case 0x43U: /* 'C' */
-    return 0xCU;
-  case 0x44U: /* 'D' */
-    return 0xDU;
-  case 0x45U: /* 'E' */
-    return 0xEU;
-  case 0x46U: /* 'F' */
-    return 0xFU;
-#if 0         /* Disabled to give the compiler a hint about low probability */
-  case 0x47U: /* 'G' */
-  case 0x48U: /* 'H' */
-  case 0x49U: /* 'I' */
-  case 0x4AU: /* 'J' */
-  case 0x4BU: /* 'K' */
-  case 0x4CU: /* 'L' */
-  case 0x4DU: /* 'M' */
-  case 0x4EU: /* 'N' */
-  case 0x4FU: /* 'O' */
-  case 0x50U: /* 'P' */
-  case 0x51U: /* 'Q' */
-  case 0x52U: /* 'R' */
-  case 0x53U: /* 'S' */
-  case 0x54U: /* 'T' */
-  case 0x55U: /* 'U' */
-  case 0x56U: /* 'V' */
-  case 0x57U: /* 'W' */
-  case 0x58U: /* 'X' */
-  case 0x59U: /* 'Y' */
-  case 0x5AU: /* 'Z' */
-  case 0x5BU: /* '[' */
-  case 0x5CU: /* '\' */
-  case 0x5DU: /* ']' */
-  case 0x5EU: /* '^' */
-  case 0x5FU: /* '_' */
-  case 0x60U: /* '`' */
-    return -1;
-#endif
-  case 0x61U: /* 'a' */
-    return 0xAU;
-  case 0x62U: /* 'b' */
-    return 0xBU;
-  case 0x63U: /* 'c' */
-    return 0xCU;
-  case 0x64U: /* 'd' */
-    return 0xDU;
-  case 0x65U: /* 'e' */
-    return 0xEU;
-  case 0x66U: /* 'f' */
-    return 0xFU;
-#if 0         /* Disabled to give the compiler a hint about low probability */
-  case 0x67U: /* 'g' */
-  case 0x68U: /* 'h' */
-  case 0x69U: /* 'i' */
-  case 0x6AU: /* 'j' */
-  case 0x6BU: /* 'k' */
-  case 0x6CU: /* 'l' */
-  case 0x6DU: /* 'm' */
-  case 0x6EU: /* 'n' */
-  case 0x6FU: /* 'o' */
-  case 0x70U: /* 'p' */
-  case 0x71U: /* 'q' */
-  case 0x72U: /* 'r' */
-  case 0x73U: /* 's' */
-  case 0x74U: /* 't' */
-  case 0x75U: /* 'u' */
-  case 0x76U: /* 'v' */
-  case 0x77U: /* 'w' */
-  case 0x78U: /* 'x' */
-  case 0x79U: /* 'y' */
-  case 0x7AU: /* 'z' */
-  case 0x7BU: /* '{' */
-  case 0x7CU: /* '|' */
-  case 0x7DU: /* '}' */
-  case 0x7EU: /* '~' */
-  case 0x7FU: /* DEL */
-  case 0x80U: /* EXT */
-  case 0x81U: /* EXT */
-  case 0x82U: /* EXT */
-  case 0x83U: /* EXT */
-  case 0x84U: /* EXT */
-  case 0x85U: /* EXT */
-  case 0x86U: /* EXT */
-  case 0x87U: /* EXT */
-  case 0x88U: /* EXT */
-  case 0x89U: /* EXT */
-  case 0x8AU: /* EXT */
-  case 0x8BU: /* EXT */
-  case 0x8CU: /* EXT */
-  case 0x8DU: /* EXT */
-  case 0x8EU: /* EXT */
-  case 0x8FU: /* EXT */
-  case 0x90U: /* EXT */
-  case 0x91U: /* EXT */
-  case 0x92U: /* EXT */
-  case 0x93U: /* EXT */
-  case 0x94U: /* EXT */
-  case 0x95U: /* EXT */
-  case 0x96U: /* EXT */
-  case 0x97U: /* EXT */
-  case 0x98U: /* EXT */
-  case 0x99U: /* EXT */
-  case 0x9AU: /* EXT */
-  case 0x9BU: /* EXT */
-  case 0x9CU: /* EXT */
-  case 0x9DU: /* EXT */
-  case 0x9EU: /* EXT */
-  case 0x9FU: /* EXT */
-  case 0xA0U: /* EXT */
-  case 0xA1U: /* EXT */
-  case 0xA2U: /* EXT */
-  case 0xA3U: /* EXT */
-  case 0xA4U: /* EXT */
-  case 0xA5U: /* EXT */
-  case 0xA6U: /* EXT */
-  case 0xA7U: /* EXT */
-  case 0xA8U: /* EXT */
-  case 0xA9U: /* EXT */
-  case 0xAAU: /* EXT */
-  case 0xABU: /* EXT */
-  case 0xACU: /* EXT */
-  case 0xADU: /* EXT */
-  case 0xAEU: /* EXT */
-  case 0xAFU: /* EXT */
-  case 0xB0U: /* EXT */
-  case 0xB1U: /* EXT */
-  case 0xB2U: /* EXT */
-  case 0xB3U: /* EXT */
-  case 0xB4U: /* EXT */
-  case 0xB5U: /* EXT */
-  case 0xB6U: /* EXT */
-  case 0xB7U: /* EXT */
-  case 0xB8U: /* EXT */
-  case 0xB9U: /* EXT */
-  case 0xBAU: /* EXT */
-  case 0xBBU: /* EXT */
-  case 0xBCU: /* EXT */
-  case 0xBDU: /* EXT */
-  case 0xBEU: /* EXT */
-  case 0xBFU: /* EXT */
-  case 0xC0U: /* EXT */
-  case 0xC1U: /* EXT */
-  case 0xC2U: /* EXT */
-  case 0xC3U: /* EXT */
-  case 0xC4U: /* EXT */
-  case 0xC5U: /* EXT */
-  case 0xC6U: /* EXT */
-  case 0xC7U: /* EXT */
-  case 0xC8U: /* EXT */
-  case 0xC9U: /* EXT */
-  case 0xCAU: /* EXT */
-  case 0xCBU: /* EXT */
-  case 0xCCU: /* EXT */
-  case 0xCDU: /* EXT */
-  case 0xCEU: /* EXT */
-  case 0xCFU: /* EXT */
-  case 0xD0U: /* EXT */
-  case 0xD1U: /* EXT */
-  case 0xD2U: /* EXT */
-  case 0xD3U: /* EXT */
-  case 0xD4U: /* EXT */
-  case 0xD5U: /* EXT */
-  case 0xD6U: /* EXT */
-  case 0xD7U: /* EXT */
-  case 0xD8U: /* EXT */
-  case 0xD9U: /* EXT */
-  case 0xDAU: /* EXT */
-  case 0xDBU: /* EXT */
-  case 0xDCU: /* EXT */
-  case 0xDDU: /* EXT */
-  case 0xDEU: /* EXT */
-  case 0xDFU: /* EXT */
-  case 0xE0U: /* EXT */
-  case 0xE1U: /* EXT */
-  case 0xE2U: /* EXT */
-  case 0xE3U: /* EXT */
-  case 0xE4U: /* EXT */
-  case 0xE5U: /* EXT */
-  case 0xE6U: /* EXT */
-  case 0xE7U: /* EXT */
-  case 0xE8U: /* EXT */
-  case 0xE9U: /* EXT */
-  case 0xEAU: /* EXT */
-  case 0xEBU: /* EXT */
-  case 0xECU: /* EXT */
-  case 0xEDU: /* EXT */
-  case 0xEEU: /* EXT */
-  case 0xEFU: /* EXT */
-  case 0xF0U: /* EXT */
-  case 0xF1U: /* EXT */
-  case 0xF2U: /* EXT */
-  case 0xF3U: /* EXT */
-  case 0xF4U: /* EXT */
-  case 0xF5U: /* EXT */
-  case 0xF6U: /* EXT */
-  case 0xF7U: /* EXT */
-  case 0xF8U: /* EXT */
-  case 0xF9U: /* EXT */
-  case 0xFAU: /* EXT */
-  case 0xFBU: /* EXT */
-  case 0xFCU: /* EXT */
-  case 0xFDU: /* EXT */
-  case 0xFEU: /* EXT */
-  case 0xFFU: /* EXT */
-    return -1;
-  default:
-    mhd_assert (0);
-    break;  /* Should be unreachable */
-#else
-  default:
-    break;
-#endif
-  }
-  return -1;
+  static const signed char map_xdigit_to_value[256] = {
+    -1 /* 0x00 (NUL) */,
+    -1 /* 0x01 (SOH) */,
+    -1 /* 0x02 (STX) */,
+    -1 /* 0x03 (ETX) */,
+    -1 /* 0x04 (EOT) */,
+    -1 /* 0x05 (ENQ) */,
+    -1 /* 0x06 (ACK) */,
+    -1 /* 0x07 (BEL) */,
+    -1 /* 0x08 (BS)  */,
+    -1 /* 0x09 (HT)  */,
+    -1 /* 0x0A (LF)  */,
+    -1 /* 0x0B (VT)  */,
+    -1 /* 0x0C (FF)  */,
+    -1 /* 0x0D (CR)  */,
+    -1 /* 0x0E (SO)  */,
+    -1 /* 0x0F (SI)  */,
+    -1 /* 0x10 (DLE) */,
+    -1 /* 0x11 (DC1) */,
+    -1 /* 0x12 (DC2) */,
+    -1 /* 0x13 (DC3) */,
+    -1 /* 0x14 (DC4) */,
+    -1 /* 0x15 (NAK) */,
+    -1 /* 0x16 (SYN) */,
+    -1 /* 0x17 (ETB) */,
+    -1 /* 0x18 (CAN) */,
+    -1 /* 0x19 (EM)  */,
+    -1 /* 0x1A (SUB) */,
+    -1 /* 0x1B (ESC) */,
+    -1 /* 0x1C (FS)  */,
+    -1 /* 0x1D (GS)  */,
+    -1 /* 0x1E (RS)  */,
+    -1 /* 0x1F (US)  */,
+    -1 /* 0x20 (' ') */,
+    -1 /* 0x21 ('!') */,
+    -1 /* 0x22 ('"') */,
+    -1 /* 0x23 ('#') */,
+    -1 /* 0x24 ('$') */,
+    -1 /* 0x25 ('%') */,
+    -1 /* 0x26 ('&') */,
+    -1 /* 0x27 ('\'') */,
+    -1 /* 0x28 ('(') */,
+    -1 /* 0x29 (')') */,
+    -1 /* 0x2A ('*') */,
+    -1 /* 0x2B ('+') */,
+    -1 /* 0x2C (',') */,
+    -1 /* 0x2D ('-') */,
+    -1 /* 0x2E ('.') */,
+    -1 /* 0x2F ('/') */,
+    0 /*  0x30 ('0') */,
+    1 /*  0x31 ('1') */,
+    2 /*  0x32 ('2') */,
+    3 /*  0x33 ('3') */,
+    4 /*  0x34 ('4') */,
+    5 /*  0x35 ('5') */,
+    6 /*  0x36 ('6') */,
+    7 /*  0x37 ('7') */,
+    8 /*  0x38 ('8') */,
+    9 /*  0x39 ('9') */,
+    -1 /* 0x3A (':') */,
+    -1 /* 0x3B (';') */,
+    -1 /* 0x3C ('<') */,
+    -1 /* 0x3D ('=') */,
+    -1 /* 0x3E ('>') */,
+    -1 /* 0x3F ('?') */,
+    -1 /* 0x40 ('@') */,
+    10 /* 0x41 ('A') */,
+    11 /* 0x42 ('B') */,
+    12 /* 0x43 ('C') */,
+    13 /* 0x44 ('D') */,
+    14 /* 0x45 ('E') */,
+    15 /* 0x46 ('F') */,
+    -1 /* 0x47 ('G') */,
+    -1 /* 0x48 ('H') */,
+    -1 /* 0x49 ('I') */,
+    -1 /* 0x4A ('J') */,
+    -1 /* 0x4B ('K') */,
+    -1 /* 0x4C ('L') */,
+    -1 /* 0x4D ('M') */,
+    -1 /* 0x4E ('N') */,
+    -1 /* 0x4F ('O') */,
+    -1 /* 0x50 ('P') */,
+    -1 /* 0x51 ('Q') */,
+    -1 /* 0x52 ('R') */,
+    -1 /* 0x53 ('S') */,
+    -1 /* 0x54 ('T') */,
+    -1 /* 0x55 ('U') */,
+    -1 /* 0x56 ('V') */,
+    -1 /* 0x57 ('W') */,
+    -1 /* 0x58 ('X') */,
+    -1 /* 0x59 ('Y') */,
+    -1 /* 0x5A ('Z') */,
+    -1 /* 0x5B ('[') */,
+    -1 /* 0x5C ('\') */,
+    -1 /* 0x5D (']') */,
+    -1 /* 0x5E ('^') */,
+    -1 /* 0x5F ('_') */,
+    -1 /* 0x60 ('`') */,
+    10 /* 0x61 ('a') */,
+    11 /* 0x62 ('b') */,
+    12 /* 0x63 ('c') */,
+    13 /* 0x64 ('d') */,
+    14 /* 0x65 ('e') */,
+    15 /* 0x66 ('f') */,
+    -1 /* 0x67 ('g') */,
+    -1 /* 0x68 ('h') */,
+    -1 /* 0x69 ('i') */,
+    -1 /* 0x6A ('j') */,
+    -1 /* 0x6B ('k') */,
+    -1 /* 0x6C ('l') */,
+    -1 /* 0x6D ('m') */,
+    -1 /* 0x6E ('n') */,
+    -1 /* 0x6F ('o') */,
+    -1 /* 0x70 ('p') */,
+    -1 /* 0x71 ('q') */,
+    -1 /* 0x72 ('r') */,
+    -1 /* 0x73 ('s') */,
+    -1 /* 0x74 ('t') */,
+    -1 /* 0x75 ('u') */,
+    -1 /* 0x76 ('v') */,
+    -1 /* 0x77 ('w') */,
+    -1 /* 0x78 ('x') */,
+    -1 /* 0x79 ('y') */,
+    -1 /* 0x7A ('z') */,
+    -1 /* 0x7B ('{') */,
+    -1 /* 0x7C ('|') */,
+    -1 /* 0x7D ('}') */,
+    -1 /* 0x7E ('~') */,
+    -1 /* 0x7F (DEL) */,
+    -1 /* 0x80 (EXT) */,
+    -1 /* 0x81 (EXT) */,
+    -1 /* 0x82 (EXT) */,
+    -1 /* 0x83 (EXT) */,
+    -1 /* 0x84 (EXT) */,
+    -1 /* 0x85 (EXT) */,
+    -1 /* 0x86 (EXT) */,
+    -1 /* 0x87 (EXT) */,
+    -1 /* 0x88 (EXT) */,
+    -1 /* 0x89 (EXT) */,
+    -1 /* 0x8A (EXT) */,
+    -1 /* 0x8B (EXT) */,
+    -1 /* 0x8C (EXT) */,
+    -1 /* 0x8D (EXT) */,
+    -1 /* 0x8E (EXT) */,
+    -1 /* 0x8F (EXT) */,
+    -1 /* 0x90 (EXT) */,
+    -1 /* 0x91 (EXT) */,
+    -1 /* 0x92 (EXT) */,
+    -1 /* 0x93 (EXT) */,
+    -1 /* 0x94 (EXT) */,
+    -1 /* 0x95 (EXT) */,
+    -1 /* 0x96 (EXT) */,
+    -1 /* 0x97 (EXT) */,
+    -1 /* 0x98 (EXT) */,
+    -1 /* 0x99 (EXT) */,
+    -1 /* 0x9A (EXT) */,
+    -1 /* 0x9B (EXT) */,
+    -1 /* 0x9C (EXT) */,
+    -1 /* 0x9D (EXT) */,
+    -1 /* 0x9E (EXT) */,
+    -1 /* 0x9F (EXT) */,
+    -1 /* 0xA0 (EXT) */,
+    -1 /* 0xA1 (EXT) */,
+    -1 /* 0xA2 (EXT) */,
+    -1 /* 0xA3 (EXT) */,
+    -1 /* 0xA4 (EXT) */,
+    -1 /* 0xA5 (EXT) */,
+    -1 /* 0xA6 (EXT) */,
+    -1 /* 0xA7 (EXT) */,
+    -1 /* 0xA8 (EXT) */,
+    -1 /* 0xA9 (EXT) */,
+    -1 /* 0xAA (EXT) */,
+    -1 /* 0xAB (EXT) */,
+    -1 /* 0xAC (EXT) */,
+    -1 /* 0xAD (EXT) */,
+    -1 /* 0xAE (EXT) */,
+    -1 /* 0xAF (EXT) */,
+    -1 /* 0xB0 (EXT) */,
+    -1 /* 0xB1 (EXT) */,
+    -1 /* 0xB2 (EXT) */,
+    -1 /* 0xB3 (EXT) */,
+    -1 /* 0xB4 (EXT) */,
+    -1 /* 0xB5 (EXT) */,
+    -1 /* 0xB6 (EXT) */,
+    -1 /* 0xB7 (EXT) */,
+    -1 /* 0xB8 (EXT) */,
+    -1 /* 0xB9 (EXT) */,
+    -1 /* 0xBA (EXT) */,
+    -1 /* 0xBB (EXT) */,
+    -1 /* 0xBC (EXT) */,
+    -1 /* 0xBD (EXT) */,
+    -1 /* 0xBE (EXT) */,
+    -1 /* 0xBF (EXT) */,
+    -1 /* 0xC0 (EXT) */,
+    -1 /* 0xC1 (EXT) */,
+    -1 /* 0xC2 (EXT) */,
+    -1 /* 0xC3 (EXT) */,
+    -1 /* 0xC4 (EXT) */,
+    -1 /* 0xC5 (EXT) */,
+    -1 /* 0xC6 (EXT) */,
+    -1 /* 0xC7 (EXT) */,
+    -1 /* 0xC8 (EXT) */,
+    -1 /* 0xC9 (EXT) */,
+    -1 /* 0xCA (EXT) */,
+    -1 /* 0xCB (EXT) */,
+    -1 /* 0xCC (EXT) */,
+    -1 /* 0xCD (EXT) */,
+    -1 /* 0xCE (EXT) */,
+    -1 /* 0xCF (EXT) */,
+    -1 /* 0xD0 (EXT) */,
+    -1 /* 0xD1 (EXT) */,
+    -1 /* 0xD2 (EXT) */,
+    -1 /* 0xD3 (EXT) */,
+    -1 /* 0xD4 (EXT) */,
+    -1 /* 0xD5 (EXT) */,
+    -1 /* 0xD6 (EXT) */,
+    -1 /* 0xD7 (EXT) */,
+    -1 /* 0xD8 (EXT) */,
+    -1 /* 0xD9 (EXT) */,
+    -1 /* 0xDA (EXT) */,
+    -1 /* 0xDB (EXT) */,
+    -1 /* 0xDC (EXT) */,
+    -1 /* 0xDD (EXT) */,
+    -1 /* 0xDE (EXT) */,
+    -1 /* 0xDF (EXT) */,
+    -1 /* 0xE0 (EXT) */,
+    -1 /* 0xE1 (EXT) */,
+    -1 /* 0xE2 (EXT) */,
+    -1 /* 0xE3 (EXT) */,
+    -1 /* 0xE4 (EXT) */,
+    -1 /* 0xE5 (EXT) */,
+    -1 /* 0xE6 (EXT) */,
+    -1 /* 0xE7 (EXT) */,
+    -1 /* 0xE8 (EXT) */,
+    -1 /* 0xE9 (EXT) */,
+    -1 /* 0xEA (EXT) */,
+    -1 /* 0xEB (EXT) */,
+    -1 /* 0xEC (EXT) */,
+    -1 /* 0xED (EXT) */,
+    -1 /* 0xEE (EXT) */,
+    -1 /* 0xEF (EXT) */,
+    -1 /* 0xF0 (EXT) */,
+    -1 /* 0xF1 (EXT) */,
+    -1 /* 0xF2 (EXT) */,
+    -1 /* 0xF3 (EXT) */,
+    -1 /* 0xF4 (EXT) */,
+    -1 /* 0xF5 (EXT) */,
+    -1 /* 0xF6 (EXT) */,
+    -1 /* 0xF7 (EXT) */,
+    -1 /* 0xF8 (EXT) */,
+    -1 /* 0xF9 (EXT) */,
+    -1 /* 0xFA (EXT) */,
+    -1 /* 0xFB (EXT) */,
+    -1 /* 0xFC (EXT) */,
+    -1 /* 0xFD (EXT) */,
+    -1 /* 0xFE (EXT) */,
+    -1   /* 0xFF (EXT) */
+  };
+  return map_xdigit_to_value[uc];
 #else  /* MHD_FAVOR_SMALL_CODE */
-  if (c <= 9)
-  {
-    if (c >= 0)
-      return (unsigned char) (c - '0');
-  }
-  else if (c <= 'F')
-  {
-    if (c >= 'A')
-      return (unsigned char) (c - 'A' + 10);
-  }
-  else if (c >= 'a')
-  {
-    if (c <= 'f')
-      return (unsigned char) (c - 'a' + 10);
-  }
+  unsigned int try_val;
+
+  try_val = uc - (unsigned char) '0';
+  if (9 >= try_val)
+    return (int) (unsigned int) try_val;
+  try_val = (uc | 0x20u /* fold case */) - (unsigned char) 'a';
+  if (5 >= try_val)
+    return (int) (unsigned int) (try_val + 10u);
 
   return -1;
 #endif /* MHD_FAVOR_SMALL_CODE */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]