aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Grin (Karlson2k) <k2k@narod.ru>2023-06-01 18:15:48 +0300
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2023-06-05 20:20:24 +0300
commit3a3208c0029f6bfe79a80878532fde93c8275eea (patch)
treeafdb1962c3d0013184c745e7a478e58be3c1d2c0
parentdc1973a702fcc24a4527b55b4bc264744abebc4e (diff)
downloadlibmicrohttpd-3a3208c0029f6bfe79a80878532fde93c8275eea.tar.gz
libmicrohttpd-3a3208c0029f6bfe79a80878532fde93c8275eea.zip
mhd_str: hex to value optimisation
-rw-r--r--src/microhttpd/mhd_str.c305
1 files changed, 304 insertions, 1 deletions
diff --git a/src/microhttpd/mhd_str.c b/src/microhttpd/mhd_str.c
index 22ae36a9..3dd3783a 100644
--- a/src/microhttpd/mhd_str.c
+++ b/src/microhttpd/mhd_str.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of libmicrohttpd 2 This file is part of libmicrohttpd
3 Copyright (C) 2015-2022 Karlson2k (Evgeny Grin) 3 Copyright (C) 2015-2023 Karlson2k (Evgeny Grin)
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public 6 modify it under the terms of the GNU Lesser General Public
@@ -211,6 +211,308 @@ todigitvalue (char c)
211_MHD_static_inline int 211_MHD_static_inline int
212toxdigitvalue (char c) 212toxdigitvalue (char c)
213{ 213{
214#if ! defined(MHD_FAVOR_SMALL_CODE)
215 switch ((unsigned char) c)
216 {
217#if 0 /* Disabled to give the compiler a hint about low probability */
218 case 0x00U: /* NUL */
219 case 0x01U: /* SOH */
220 case 0x02U: /* STX */
221 case 0x03U: /* ETX */
222 case 0x04U: /* EOT */
223 case 0x05U: /* ENQ */
224 case 0x06U: /* ACK */
225 case 0x07U: /* BEL */
226 case 0x08U: /* BS */
227 case 0x09U: /* HT */
228 case 0x0AU: /* LF */
229 case 0x0BU: /* VT */
230 case 0x0CU: /* FF */
231 case 0x0DU: /* CR */
232 case 0x0EU: /* SO */
233 case 0x0FU: /* SI */
234 case 0x10U: /* DLE */
235 case 0x11U: /* DC1 */
236 case 0x12U: /* DC2 */
237 case 0x13U: /* DC3 */
238 case 0x14U: /* DC4 */
239 case 0x15U: /* NAK */
240 case 0x16U: /* SYN */
241 case 0x17U: /* ETB */
242 case 0x18U: /* CAN */
243 case 0x19U: /* EM */
244 case 0x1AU: /* SUB */
245 case 0x1BU: /* ESC */
246 case 0x1CU: /* FS */
247 case 0x1DU: /* GS */
248 case 0x1EU: /* RS */
249 case 0x1FU: /* US */
250 case 0x20U: /* ' ' */
251 case 0x21U: /* '!' */
252 case 0x22U: /* '"' */
253 case 0x23U: /* '#' */
254 case 0x24U: /* '$' */
255 case 0x25U: /* '%' */
256 case 0x26U: /* '&' */
257 case 0x27U: /* '\'' */
258 case 0x28U: /* '(' */
259 case 0x29U: /* ')' */
260 case 0x2AU: /* '*' */
261 case 0x2BU: /* '+' */
262 case 0x2CU: /* ',' */
263 case 0x2DU: /* '-' */
264 case 0x2EU: /* '.' */
265 case 0x2FU: /* '/' */
266 return -1;
267#endif
268 case 0x30U: /* '0' */
269 return 0;
270 case 0x31U: /* '1' */
271 return 1;
272 case 0x32U: /* '2' */
273 return 2;
274 case 0x33U: /* '3' */
275 return 3;
276 case 0x34U: /* '4' */
277 return 4;
278 case 0x35U: /* '5' */
279 return 5;
280 case 0x36U: /* '6' */
281 return 6;
282 case 0x37U: /* '7' */
283 return 7;
284 case 0x38U: /* '8' */
285 return 8;
286 case 0x39U: /* '9' */
287 return 9;
288#if 0 /* Disabled to give the compiler a hint about low probability */
289 case 0x3AU: /* ':' */
290 case 0x3BU: /* ';' */
291 case 0x3CU: /* '<' */
292 case 0x3DU: /* '=' */
293 case 0x3EU: /* '>' */
294 case 0x3FU: /* '?' */
295 case 0x40U: /* '@' */
296 return -1;
297#endif
298 case 0x41U: /* 'A' */
299 return 0xAU;
300 case 0x42U: /* 'B' */
301 return 0xBU;
302 case 0x43U: /* 'C' */
303 return 0xCU;
304 case 0x44U: /* 'D' */
305 return 0xDU;
306 case 0x45U: /* 'E' */
307 return 0xEU;
308 case 0x46U: /* 'F' */
309 return 0xFU;
310#if 0 /* Disabled to give the compiler a hint about low probability */
311 case 0x47U: /* 'G' */
312 case 0x48U: /* 'H' */
313 case 0x49U: /* 'I' */
314 case 0x4AU: /* 'J' */
315 case 0x4BU: /* 'K' */
316 case 0x4CU: /* 'L' */
317 case 0x4DU: /* 'M' */
318 case 0x4EU: /* 'N' */
319 case 0x4FU: /* 'O' */
320 case 0x50U: /* 'P' */
321 case 0x51U: /* 'Q' */
322 case 0x52U: /* 'R' */
323 case 0x53U: /* 'S' */
324 case 0x54U: /* 'T' */
325 case 0x55U: /* 'U' */
326 case 0x56U: /* 'V' */
327 case 0x57U: /* 'W' */
328 case 0x58U: /* 'X' */
329 case 0x59U: /* 'Y' */
330 case 0x5AU: /* 'Z' */
331 case 0x5BU: /* '[' */
332 case 0x5CU: /* '\' */
333 case 0x5DU: /* ']' */
334 case 0x5EU: /* '^' */
335 case 0x5FU: /* '_' */
336 case 0x60U: /* '`' */
337 return -1;
338#endif
339 case 0x61U: /* 'a' */
340 return 0xAU;
341 case 0x62U: /* 'b' */
342 return 0xBU;
343 case 0x63U: /* 'c' */
344 return 0xCU;
345 case 0x64U: /* 'd' */
346 return 0xDU;
347 case 0x65U: /* 'e' */
348 return 0xEU;
349 case 0x66U: /* 'f' */
350 return 0xFU;
351#if 0 /* Disabled to give the compiler a hint about low probability */
352 case 0x67U: /* 'g' */
353 case 0x68U: /* 'h' */
354 case 0x69U: /* 'i' */
355 case 0x6AU: /* 'j' */
356 case 0x6BU: /* 'k' */
357 case 0x6CU: /* 'l' */
358 case 0x6DU: /* 'm' */
359 case 0x6EU: /* 'n' */
360 case 0x6FU: /* 'o' */
361 case 0x70U: /* 'p' */
362 case 0x71U: /* 'q' */
363 case 0x72U: /* 'r' */
364 case 0x73U: /* 's' */
365 case 0x74U: /* 't' */
366 case 0x75U: /* 'u' */
367 case 0x76U: /* 'v' */
368 case 0x77U: /* 'w' */
369 case 0x78U: /* 'x' */
370 case 0x79U: /* 'y' */
371 case 0x7AU: /* 'z' */
372 case 0x7BU: /* '{' */
373 case 0x7CU: /* '|' */
374 case 0x7DU: /* '}' */
375 case 0x7EU: /* '~' */
376 case 0x7FU: /* DEL */
377 case 0x80U: /* EXT */
378 case 0x81U: /* EXT */
379 case 0x82U: /* EXT */
380 case 0x83U: /* EXT */
381 case 0x84U: /* EXT */
382 case 0x85U: /* EXT */
383 case 0x86U: /* EXT */
384 case 0x87U: /* EXT */
385 case 0x88U: /* EXT */
386 case 0x89U: /* EXT */
387 case 0x8AU: /* EXT */
388 case 0x8BU: /* EXT */
389 case 0x8CU: /* EXT */
390 case 0x8DU: /* EXT */
391 case 0x8EU: /* EXT */
392 case 0x8FU: /* EXT */
393 case 0x90U: /* EXT */
394 case 0x91U: /* EXT */
395 case 0x92U: /* EXT */
396 case 0x93U: /* EXT */
397 case 0x94U: /* EXT */
398 case 0x95U: /* EXT */
399 case 0x96U: /* EXT */
400 case 0x97U: /* EXT */
401 case 0x98U: /* EXT */
402 case 0x99U: /* EXT */
403 case 0x9AU: /* EXT */
404 case 0x9BU: /* EXT */
405 case 0x9CU: /* EXT */
406 case 0x9DU: /* EXT */
407 case 0x9EU: /* EXT */
408 case 0x9FU: /* EXT */
409 case 0xA0U: /* EXT */
410 case 0xA1U: /* EXT */
411 case 0xA2U: /* EXT */
412 case 0xA3U: /* EXT */
413 case 0xA4U: /* EXT */
414 case 0xA5U: /* EXT */
415 case 0xA6U: /* EXT */
416 case 0xA7U: /* EXT */
417 case 0xA8U: /* EXT */
418 case 0xA9U: /* EXT */
419 case 0xAAU: /* EXT */
420 case 0xABU: /* EXT */
421 case 0xACU: /* EXT */
422 case 0xADU: /* EXT */
423 case 0xAEU: /* EXT */
424 case 0xAFU: /* EXT */
425 case 0xB0U: /* EXT */
426 case 0xB1U: /* EXT */
427 case 0xB2U: /* EXT */
428 case 0xB3U: /* EXT */
429 case 0xB4U: /* EXT */
430 case 0xB5U: /* EXT */
431 case 0xB6U: /* EXT */
432 case 0xB7U: /* EXT */
433 case 0xB8U: /* EXT */
434 case 0xB9U: /* EXT */
435 case 0xBAU: /* EXT */
436 case 0xBBU: /* EXT */
437 case 0xBCU: /* EXT */
438 case 0xBDU: /* EXT */
439 case 0xBEU: /* EXT */
440 case 0xBFU: /* EXT */
441 case 0xC0U: /* EXT */
442 case 0xC1U: /* EXT */
443 case 0xC2U: /* EXT */
444 case 0xC3U: /* EXT */
445 case 0xC4U: /* EXT */
446 case 0xC5U: /* EXT */
447 case 0xC6U: /* EXT */
448 case 0xC7U: /* EXT */
449 case 0xC8U: /* EXT */
450 case 0xC9U: /* EXT */
451 case 0xCAU: /* EXT */
452 case 0xCBU: /* EXT */
453 case 0xCCU: /* EXT */
454 case 0xCDU: /* EXT */
455 case 0xCEU: /* EXT */
456 case 0xCFU: /* EXT */
457 case 0xD0U: /* EXT */
458 case 0xD1U: /* EXT */
459 case 0xD2U: /* EXT */
460 case 0xD3U: /* EXT */
461 case 0xD4U: /* EXT */
462 case 0xD5U: /* EXT */
463 case 0xD6U: /* EXT */
464 case 0xD7U: /* EXT */
465 case 0xD8U: /* EXT */
466 case 0xD9U: /* EXT */
467 case 0xDAU: /* EXT */
468 case 0xDBU: /* EXT */
469 case 0xDCU: /* EXT */
470 case 0xDDU: /* EXT */
471 case 0xDEU: /* EXT */
472 case 0xDFU: /* EXT */
473 case 0xE0U: /* EXT */
474 case 0xE1U: /* EXT */
475 case 0xE2U: /* EXT */
476 case 0xE3U: /* EXT */
477 case 0xE4U: /* EXT */
478 case 0xE5U: /* EXT */
479 case 0xE6U: /* EXT */
480 case 0xE7U: /* EXT */
481 case 0xE8U: /* EXT */
482 case 0xE9U: /* EXT */
483 case 0xEAU: /* EXT */
484 case 0xEBU: /* EXT */
485 case 0xECU: /* EXT */
486 case 0xEDU: /* EXT */
487 case 0xEEU: /* EXT */
488 case 0xEFU: /* EXT */
489 case 0xF0U: /* EXT */
490 case 0xF1U: /* EXT */
491 case 0xF2U: /* EXT */
492 case 0xF3U: /* EXT */
493 case 0xF4U: /* EXT */
494 case 0xF5U: /* EXT */
495 case 0xF6U: /* EXT */
496 case 0xF7U: /* EXT */
497 case 0xF8U: /* EXT */
498 case 0xF9U: /* EXT */
499 case 0xFAU: /* EXT */
500 case 0xFBU: /* EXT */
501 case 0xFCU: /* EXT */
502 case 0xFDU: /* EXT */
503 case 0xFEU: /* EXT */
504 case 0xFFU: /* EXT */
505 return -1;
506 default:
507 mhd_assert (0);
508 break; /* Should be unreachable */
509#else
510 default:
511 break;
512#endif
513 }
514 return -1;
515#else /* MHD_FAVOR_SMALL_CODE */
214 if (isasciidigit (c)) 516 if (isasciidigit (c))
215 return (unsigned char) (c - '0'); 517 return (unsigned char) (c - '0');
216 if ( (c >= 'A') && (c <= 'F') ) 518 if ( (c >= 'A') && (c <= 'F') )
@@ -219,6 +521,7 @@ toxdigitvalue (char c)
219 return (unsigned char) (c - 'a' + 10); 521 return (unsigned char) (c - 'a' + 10);
220 522
221 return -1; 523 return -1;
524#endif /* MHD_FAVOR_SMALL_CODE */
222} 525}
223 526
224 527