diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2023-06-01 18:15:48 +0300 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2023-06-05 20:20:24 +0300 |
commit | 3a3208c0029f6bfe79a80878532fde93c8275eea (patch) | |
tree | afdb1962c3d0013184c745e7a478e58be3c1d2c0 | |
parent | dc1973a702fcc24a4527b55b4bc264744abebc4e (diff) | |
download | libmicrohttpd-3a3208c0029f6bfe79a80878532fde93c8275eea.tar.gz libmicrohttpd-3a3208c0029f6bfe79a80878532fde93c8275eea.zip |
mhd_str: hex to value optimisation
-rw-r--r-- | src/microhttpd/mhd_str.c | 305 |
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 |
212 | toxdigitvalue (char c) | 212 | toxdigitvalue (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 | ||