./
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
0 / 110
0.0%
Branches:
0 / 1070
0.0%
Functions:
0 / 6
0.0%

apps/runner/src/eu/runner/input.cc
Line Branch Exec Source
1 #include "eu/runner/input.h"
2
3 #include <SDL_keycode.h>
4
5 #include "eu/io/file.h"
6 #include "eu/kdl/kdl.h"
7
8 namespace eu::runner
9 {
10
11 ✗ std::string lower(const std::string& str)
12 {
13 ✗ std::string result;
14
0/2
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 23 not taken.
✗ result.reserve(str.size());
15
0/2
✗ Branch 19 → 7 not taken.
✗ Branch 19 → 20 not taken.
✗ for (const char c : str)
16 {
17
0/2
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 22 not taken.
✗ result.push_back(static_cast<char>(std::tolower(c)));
18 }
19 ✗ return result;
20 ✗ }
21
22 ✗ std::optional<KeyboardKey> key_from_name(const std::string& name)
23 {
24 static const std::unordered_map<std::string, KeyboardKey> key_map = {
25 #define K(name){lower(#name), SDLK_##name}
26
0/16
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 2816 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 2814 not taken.
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 2807 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 2800 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 2793 not taken.
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 2786 not taken.
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 2779 not taken.
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 2772 not taken.
✗ K(RETURN), K(ESCAPE), K(BACKSPACE), K(TAB), K(SPACE), K(EXCLAIM), K(DBLAPOSTROPHE),
27
0/12
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 2765 not taken.
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 2758 not taken.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 2751 not taken.
✗ Branch 38 → 39 not taken.
✗ Branch 38 → 2744 not taken.
✗ Branch 41 → 42 not taken.
✗ Branch 41 → 2737 not taken.
✗ Branch 44 → 45 not taken.
✗ Branch 44 → 2730 not taken.
✗ K(HASH), K(PERCENT), K(DOLLAR), K(AMPERSAND), K(APOSTROPHE), K(LEFTPAREN),
28
0/14
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 2723 not taken.
✗ Branch 50 → 51 not taken.
✗ Branch 50 → 2716 not taken.
✗ Branch 53 → 54 not taken.
✗ Branch 53 → 2709 not taken.
✗ Branch 56 → 57 not taken.
✗ Branch 56 → 2702 not taken.
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 2695 not taken.
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 2688 not taken.
✗ Branch 65 → 66 not taken.
✗ Branch 65 → 2681 not taken.
✗ K(RIGHTPAREN), K(ASTERISK), K(PLUS), K(COMMA), K(MINUS), K(PERIOD), K(SLASH),
29
0/20
✗ Branch 68 → 69 not taken.
✗ Branch 68 → 2674 not taken.
✗ Branch 71 → 72 not taken.
✗ Branch 71 → 2667 not taken.
✗ Branch 74 → 75 not taken.
✗ Branch 74 → 2660 not taken.
✗ Branch 77 → 78 not taken.
✗ Branch 77 → 2653 not taken.
✗ Branch 80 → 81 not taken.
✗ Branch 80 → 2646 not taken.
✗ Branch 83 → 84 not taken.
✗ Branch 83 → 2639 not taken.
✗ Branch 86 → 87 not taken.
✗ Branch 86 → 2632 not taken.
✗ Branch 89 → 90 not taken.
✗ Branch 89 → 2625 not taken.
✗ Branch 92 → 93 not taken.
✗ Branch 92 → 2618 not taken.
✗ Branch 95 → 96 not taken.
✗ Branch 95 → 2611 not taken.
✗ K(0), K(1), K(2), K(3), K(4), K(5), K(6), K(7), K(8), K(9),
30
0/14
✗ Branch 98 → 99 not taken.
✗ Branch 98 → 2604 not taken.
✗ Branch 101 → 102 not taken.
✗ Branch 101 → 2597 not taken.
✗ Branch 104 → 105 not taken.
✗ Branch 104 → 2590 not taken.
✗ Branch 107 → 108 not taken.
✗ Branch 107 → 2583 not taken.
✗ Branch 110 → 111 not taken.
✗ Branch 110 → 2576 not taken.
✗ Branch 113 → 114 not taken.
✗ Branch 113 → 2569 not taken.
✗ Branch 116 → 117 not taken.
✗ Branch 116 → 2562 not taken.
✗ K(COLON), K(SEMICOLON), K(LESS), K(EQUALS), K(GREATER), K(QUESTION), K(AT),
31
0/12
✗ Branch 119 → 120 not taken.
✗ Branch 119 → 2555 not taken.
✗ Branch 122 → 123 not taken.
✗ Branch 122 → 2548 not taken.
✗ Branch 125 → 126 not taken.
✗ Branch 125 → 2541 not taken.
✗ Branch 128 → 129 not taken.
✗ Branch 128 → 2534 not taken.
✗ Branch 131 → 132 not taken.
✗ Branch 131 → 2527 not taken.
✗ Branch 134 → 135 not taken.
✗ Branch 134 → 2520 not taken.
✗ K(LEFTBRACKET), K(BACKSLASH), K(RIGHTBRACKET), K(CARET), K(UNDERSCORE), K(GRAVE),
32
0/20
✗ Branch 137 → 138 not taken.
✗ Branch 137 → 2513 not taken.
✗ Branch 140 → 141 not taken.
✗ Branch 140 → 2506 not taken.
✗ Branch 143 → 144 not taken.
✗ Branch 143 → 2499 not taken.
✗ Branch 146 → 147 not taken.
✗ Branch 146 → 2492 not taken.
✗ Branch 149 → 150 not taken.
✗ Branch 149 → 2485 not taken.
✗ Branch 152 → 153 not taken.
✗ Branch 152 → 2478 not taken.
✗ Branch 155 → 156 not taken.
✗ Branch 155 → 2471 not taken.
✗ Branch 158 → 159 not taken.
✗ Branch 158 → 2464 not taken.
✗ Branch 161 → 162 not taken.
✗ Branch 161 → 2457 not taken.
✗ Branch 164 → 165 not taken.
✗ Branch 164 → 2450 not taken.
✗ K(A), K(B), K(C), K(D), K(E), K(F), K(G), K(H), K(I), K(J),
33
0/20
✗ Branch 167 → 168 not taken.
✗ Branch 167 → 2443 not taken.
✗ Branch 170 → 171 not taken.
✗ Branch 170 → 2436 not taken.
✗ Branch 173 → 174 not taken.
✗ Branch 173 → 2429 not taken.
✗ Branch 176 → 177 not taken.
✗ Branch 176 → 2422 not taken.
✗ Branch 179 → 180 not taken.
✗ Branch 179 → 2415 not taken.
✗ Branch 182 → 183 not taken.
✗ Branch 182 → 2408 not taken.
✗ Branch 185 → 186 not taken.
✗ Branch 185 → 2401 not taken.
✗ Branch 188 → 189 not taken.
✗ Branch 188 → 2394 not taken.
✗ Branch 191 → 192 not taken.
✗ Branch 191 → 2387 not taken.
✗ Branch 194 → 195 not taken.
✗ Branch 194 → 2380 not taken.
✗ K(K), K(L), K(M), K(N), K(O), K(P), K(Q), K(R), K(S), K(T),
34
0/12
✗ Branch 197 → 198 not taken.
✗ Branch 197 → 2373 not taken.
✗ Branch 200 → 201 not taken.
✗ Branch 200 → 2366 not taken.
✗ Branch 203 → 204 not taken.
✗ Branch 203 → 2359 not taken.
✗ Branch 206 → 207 not taken.
✗ Branch 206 → 2352 not taken.
✗ Branch 209 → 210 not taken.
✗ Branch 209 → 2345 not taken.
✗ Branch 212 → 213 not taken.
✗ Branch 212 → 2338 not taken.
✗ K(U), K(V), K(W), K(X), K(Y), K(Z),
35
0/26
✗ Branch 215 → 216 not taken.
✗ Branch 215 → 2331 not taken.
✗ Branch 218 → 219 not taken.
✗ Branch 218 → 2324 not taken.
✗ Branch 221 → 222 not taken.
✗ Branch 221 → 2317 not taken.
✗ Branch 224 → 225 not taken.
✗ Branch 224 → 2310 not taken.
✗ Branch 227 → 228 not taken.
✗ Branch 227 → 2303 not taken.
✗ Branch 230 → 231 not taken.
✗ Branch 230 → 2296 not taken.
✗ Branch 233 → 234 not taken.
✗ Branch 233 → 2289 not taken.
✗ Branch 236 → 237 not taken.
✗ Branch 236 → 2282 not taken.
✗ Branch 239 → 240 not taken.
✗ Branch 239 → 2275 not taken.
✗ Branch 242 → 243 not taken.
✗ Branch 242 → 2268 not taken.
✗ Branch 245 → 246 not taken.
✗ Branch 245 → 2261 not taken.
✗ Branch 248 → 249 not taken.
✗ Branch 248 → 2254 not taken.
✗ Branch 251 → 252 not taken.
✗ Branch 251 → 2247 not taken.
✗ K(CAPSLOCK), K(F1), K(F2), K(F3), K(F4), K(F5), K(F6), K(F7), K(F8), K(F9), K(F10), K(F11), K(F12),
36
0/14
✗ Branch 254 → 255 not taken.
✗ Branch 254 → 2240 not taken.
✗ Branch 257 → 258 not taken.
✗ Branch 257 → 2233 not taken.
✗ Branch 260 → 261 not taken.
✗ Branch 260 → 2226 not taken.
✗ Branch 263 → 264 not taken.
✗ Branch 263 → 2219 not taken.
✗ Branch 266 → 267 not taken.
✗ Branch 266 → 2212 not taken.
✗ Branch 269 → 270 not taken.
✗ Branch 269 → 2205 not taken.
✗ Branch 272 → 273 not taken.
✗ Branch 272 → 2198 not taken.
✗ K(PRINTSCREEN), K(SCROLLLOCK), K(PAUSE), K(INSERT), K(HOME), K(PAGEUP), K(DELETE),
37
0/14
✗ Branch 275 → 276 not taken.
✗ Branch 275 → 2191 not taken.
✗ Branch 278 → 279 not taken.
✗ Branch 278 → 2184 not taken.
✗ Branch 281 → 282 not taken.
✗ Branch 281 → 2177 not taken.
✗ Branch 284 → 285 not taken.
✗ Branch 284 → 2170 not taken.
✗ Branch 287 → 288 not taken.
✗ Branch 287 → 2163 not taken.
✗ Branch 290 → 291 not taken.
✗ Branch 290 → 2156 not taken.
✗ Branch 293 → 294 not taken.
✗ Branch 293 → 2149 not taken.
✗ K(END), K(PAGEDOWN), K(RIGHT), K(LEFT), K(DOWN), K(UP), K(NUMLOCKCLEAR),
38
0/10
✗ Branch 296 → 297 not taken.
✗ Branch 296 → 2142 not taken.
✗ Branch 299 → 300 not taken.
✗ Branch 299 → 2135 not taken.
✗ Branch 302 → 303 not taken.
✗ Branch 302 → 2128 not taken.
✗ Branch 305 → 306 not taken.
✗ Branch 305 → 2121 not taken.
✗ Branch 308 → 309 not taken.
✗ Branch 308 → 2114 not taken.
✗ K(KP_DIVIDE), K(KP_MULTIPLY), K(KP_MINUS), K(KP_PLUS), K(KP_ENTER),
39
0/20
✗ Branch 311 → 312 not taken.
✗ Branch 311 → 2107 not taken.
✗ Branch 314 → 315 not taken.
✗ Branch 314 → 2100 not taken.
✗ Branch 317 → 318 not taken.
✗ Branch 317 → 2093 not taken.
✗ Branch 320 → 321 not taken.
✗ Branch 320 → 2086 not taken.
✗ Branch 323 → 324 not taken.
✗ Branch 323 → 2079 not taken.
✗ Branch 326 → 327 not taken.
✗ Branch 326 → 2072 not taken.
✗ Branch 329 → 330 not taken.
✗ Branch 329 → 2065 not taken.
✗ Branch 332 → 333 not taken.
✗ Branch 332 → 2058 not taken.
✗ Branch 335 → 336 not taken.
✗ Branch 335 → 2051 not taken.
✗ Branch 338 → 339 not taken.
✗ Branch 338 → 2044 not taken.
✗ K(KP_1), K(KP_2), K(KP_3), K(KP_4), K(KP_5), K(KP_6), K(KP_7), K(KP_8), K(KP_9), K(KP_0),
40
0/8
✗ Branch 341 → 342 not taken.
✗ Branch 341 → 2037 not taken.
✗ Branch 344 → 345 not taken.
✗ Branch 344 → 2030 not taken.
✗ Branch 347 → 348 not taken.
✗ Branch 347 → 2023 not taken.
✗ Branch 350 → 351 not taken.
✗ Branch 350 → 2016 not taken.
✗ K(KP_PERIOD), K(APPLICATION), K(POWER), K(KP_EQUALS),
41
0/24
✗ Branch 353 → 354 not taken.
✗ Branch 353 → 2009 not taken.
✗ Branch 356 → 357 not taken.
✗ Branch 356 → 2002 not taken.
✗ Branch 359 → 360 not taken.
✗ Branch 359 → 1995 not taken.
✗ Branch 362 → 363 not taken.
✗ Branch 362 → 1988 not taken.
✗ Branch 365 → 366 not taken.
✗ Branch 365 → 1981 not taken.
✗ Branch 368 → 369 not taken.
✗ Branch 368 → 1974 not taken.
✗ Branch 371 → 372 not taken.
✗ Branch 371 → 1967 not taken.
✗ Branch 374 → 375 not taken.
✗ Branch 374 → 1960 not taken.
✗ Branch 377 → 378 not taken.
✗ Branch 377 → 1953 not taken.
✗ Branch 380 → 381 not taken.
✗ Branch 380 → 1946 not taken.
✗ Branch 383 → 384 not taken.
✗ Branch 383 → 1939 not taken.
✗ Branch 386 → 387 not taken.
✗ Branch 386 → 1932 not taken.
✗ K(F13), K(F14), K(F15), K(F16), K(F17), K(F18), K(F19), K(F20), K(F21), K(F22), K(F23), K(F24),
42
0/14
✗ Branch 389 → 390 not taken.
✗ Branch 389 → 1925 not taken.
✗ Branch 392 → 393 not taken.
✗ Branch 392 → 1918 not taken.
✗ Branch 395 → 396 not taken.
✗ Branch 395 → 1911 not taken.
✗ Branch 398 → 399 not taken.
✗ Branch 398 → 1904 not taken.
✗ Branch 401 → 402 not taken.
✗ Branch 401 → 1897 not taken.
✗ Branch 404 → 405 not taken.
✗ Branch 404 → 1890 not taken.
✗ Branch 407 → 408 not taken.
✗ Branch 407 → 1883 not taken.
✗ K(EXECUTE), K(HELP), K(MENU), K(SELECT), K(STOP), K(AGAIN), K(UNDO),
43
0/14
✗ Branch 410 → 411 not taken.
✗ Branch 410 → 1876 not taken.
✗ Branch 413 → 414 not taken.
✗ Branch 413 → 1869 not taken.
✗ Branch 416 → 417 not taken.
✗ Branch 416 → 1862 not taken.
✗ Branch 419 → 420 not taken.
✗ Branch 419 → 1855 not taken.
✗ Branch 422 → 423 not taken.
✗ Branch 422 → 1848 not taken.
✗ Branch 425 → 426 not taken.
✗ Branch 425 → 1841 not taken.
✗ Branch 428 → 429 not taken.
✗ Branch 428 → 1834 not taken.
✗ K(CUT), K(COPY), K(PASTE), K(FIND), K(MUTE), K(VOLUMEUP), K(VOLUMEDOWN),
44
0/12
✗ Branch 431 → 432 not taken.
✗ Branch 431 → 1827 not taken.
✗ Branch 434 → 435 not taken.
✗ Branch 434 → 1820 not taken.
✗ Branch 437 → 438 not taken.
✗ Branch 437 → 1813 not taken.
✗ Branch 440 → 441 not taken.
✗ Branch 440 → 1806 not taken.
✗ Branch 443 → 444 not taken.
✗ Branch 443 → 1799 not taken.
✗ Branch 446 → 447 not taken.
✗ Branch 446 → 1792 not taken.
✗ K(KP_COMMA), K(KP_EQUALSAS400), K(ALTERASE), K(SYSREQ), K(CANCEL), K(CLEAR),
45
0/14
✗ Branch 449 → 450 not taken.
✗ Branch 449 → 1785 not taken.
✗ Branch 452 → 453 not taken.
✗ Branch 452 → 1778 not taken.
✗ Branch 455 → 456 not taken.
✗ Branch 455 → 1771 not taken.
✗ Branch 458 → 459 not taken.
✗ Branch 458 → 1764 not taken.
✗ Branch 461 → 462 not taken.
✗ Branch 461 → 1757 not taken.
✗ Branch 464 → 465 not taken.
✗ Branch 464 → 1750 not taken.
✗ Branch 467 → 468 not taken.
✗ Branch 467 → 1743 not taken.
✗ K(PRIOR), K(RETURN2), K(SEPARATOR), K(OUT), K(OPER), K(CLEARAGAIN), K(CRSEL),
46
0/10
✗ Branch 470 → 471 not taken.
✗ Branch 470 → 1736 not taken.
✗ Branch 473 → 474 not taken.
✗ Branch 473 → 1729 not taken.
✗ Branch 476 → 477 not taken.
✗ Branch 476 → 1722 not taken.
✗ Branch 479 → 480 not taken.
✗ Branch 479 → 1715 not taken.
✗ Branch 482 → 483 not taken.
✗ Branch 482 → 1708 not taken.
✗ K(EXSEL), K(KP_00), K(KP_000), K(THOUSANDSSEPARATOR), K(DECIMALSEPARATOR),
47
0/10
✗ Branch 485 → 486 not taken.
✗ Branch 485 → 1701 not taken.
✗ Branch 488 → 489 not taken.
✗ Branch 488 → 1694 not taken.
✗ Branch 491 → 492 not taken.
✗ Branch 491 → 1687 not taken.
✗ Branch 494 → 495 not taken.
✗ Branch 494 → 1680 not taken.
✗ Branch 497 → 498 not taken.
✗ Branch 497 → 1673 not taken.
✗ K(CURRENCYUNIT), K(CURRENCYSUBUNIT), K(KP_LEFTPAREN), K(KP_RIGHTPAREN), K(KP_LEFTBRACE),
48
0/14
✗ Branch 500 → 501 not taken.
✗ Branch 500 → 1666 not taken.
✗ Branch 503 → 504 not taken.
✗ Branch 503 → 1659 not taken.
✗ Branch 506 → 507 not taken.
✗ Branch 506 → 1652 not taken.
✗ Branch 509 → 510 not taken.
✗ Branch 509 → 1645 not taken.
✗ Branch 512 → 513 not taken.
✗ Branch 512 → 1638 not taken.
✗ Branch 515 → 516 not taken.
✗ Branch 515 → 1631 not taken.
✗ Branch 518 → 519 not taken.
✗ Branch 518 → 1624 not taken.
✗ K(KP_RIGHTBRACE), K(KP_TAB), K(KP_BACKSPACE), K(KP_A), K(KP_B), K(KP_C), K(KP_D),
49
0/14
✗ Branch 521 → 522 not taken.
✗ Branch 521 → 1617 not taken.
✗ Branch 524 → 525 not taken.
✗ Branch 524 → 1610 not taken.
✗ Branch 527 → 528 not taken.
✗ Branch 527 → 1603 not taken.
✗ Branch 530 → 531 not taken.
✗ Branch 530 → 1596 not taken.
✗ Branch 533 → 534 not taken.
✗ Branch 533 → 1589 not taken.
✗ Branch 536 → 537 not taken.
✗ Branch 536 → 1582 not taken.
✗ Branch 539 → 540 not taken.
✗ Branch 539 → 1575 not taken.
✗ K(KP_E), K(KP_F), K(KP_XOR), K(KP_POWER), K(KP_PERCENT), K(KP_LESS), K(KP_GREATER),
50
0/10
✗ Branch 542 → 543 not taken.
✗ Branch 542 → 1568 not taken.
✗ Branch 545 → 546 not taken.
✗ Branch 545 → 1561 not taken.
✗ Branch 548 → 549 not taken.
✗ Branch 548 → 1554 not taken.
✗ Branch 551 → 552 not taken.
✗ Branch 551 → 1547 not taken.
✗ Branch 554 → 555 not taken.
✗ Branch 554 → 1540 not taken.
✗ K(KP_AMPERSAND), K(KP_DBLAMPERSAND), K(KP_VERTICALBAR), K(KP_DBLVERTICALBAR), K(KP_COLON),
51
0/12
✗ Branch 557 → 558 not taken.
✗ Branch 557 → 1533 not taken.
✗ Branch 560 → 561 not taken.
✗ Branch 560 → 1526 not taken.
✗ Branch 563 → 564 not taken.
✗ Branch 563 → 1519 not taken.
✗ Branch 566 → 567 not taken.
✗ Branch 566 → 1512 not taken.
✗ Branch 569 → 570 not taken.
✗ Branch 569 → 1505 not taken.
✗ Branch 572 → 573 not taken.
✗ Branch 572 → 1498 not taken.
✗ K(KP_HASH), K(KP_SPACE), K(KP_AT), K(KP_EXCLAM), K(KP_MEMSTORE), K(KP_MEMRECALL),
52
0/10
✗ Branch 575 → 576 not taken.
✗ Branch 575 → 1491 not taken.
✗ Branch 578 → 579 not taken.
✗ Branch 578 → 1484 not taken.
✗ Branch 581 → 582 not taken.
✗ Branch 581 → 1477 not taken.
✗ Branch 584 → 585 not taken.
✗ Branch 584 → 1470 not taken.
✗ Branch 587 → 588 not taken.
✗ Branch 587 → 1463 not taken.
✗ K(KP_MEMCLEAR), K(KP_MEMADD), K(KP_MEMSUBTRACT), K(KP_MEMMULTIPLY), K(KP_MEMDIVIDE),
53
0/12
✗ Branch 590 → 591 not taken.
✗ Branch 590 → 1456 not taken.
✗ Branch 593 → 594 not taken.
✗ Branch 593 → 1449 not taken.
✗ Branch 596 → 597 not taken.
✗ Branch 596 → 1442 not taken.
✗ Branch 599 → 600 not taken.
✗ Branch 599 → 1435 not taken.
✗ Branch 602 → 603 not taken.
✗ Branch 602 → 1428 not taken.
✗ Branch 605 → 606 not taken.
✗ Branch 605 → 1421 not taken.
✗ K(KP_PLUSMINUS), K(KP_CLEAR), K(KP_CLEARENTRY), K(KP_BINARY), K(KP_OCTAL), K(KP_DECIMAL),
54
0/16
✗ Branch 608 → 609 not taken.
✗ Branch 608 → 1414 not taken.
✗ Branch 611 → 612 not taken.
✗ Branch 611 → 1407 not taken.
✗ Branch 614 → 615 not taken.
✗ Branch 614 → 1400 not taken.
✗ Branch 617 → 618 not taken.
✗ Branch 617 → 1393 not taken.
✗ Branch 620 → 621 not taken.
✗ Branch 620 → 1386 not taken.
✗ Branch 623 → 624 not taken.
✗ Branch 623 → 1379 not taken.
✗ Branch 626 → 627 not taken.
✗ Branch 626 → 1372 not taken.
✗ Branch 629 → 630 not taken.
✗ Branch 629 → 1365 not taken.
✗ K(KP_HEXADECIMAL), K(LCTRL), K(LSHIFT), K(LALT), K(LGUI), K(RCTRL), K(RSHIFT), K(RALT),
55
0/14
✗ Branch 632 → 633 not taken.
✗ Branch 632 → 1358 not taken.
✗ Branch 635 → 636 not taken.
✗ Branch 635 → 1351 not taken.
✗ Branch 638 → 639 not taken.
✗ Branch 638 → 1344 not taken.
✗ Branch 641 → 642 not taken.
✗ Branch 641 → 1337 not taken.
✗ Branch 644 → 645 not taken.
✗ Branch 644 → 1330 not taken.
✗ Branch 647 → 648 not taken.
✗ Branch 647 → 1323 not taken.
✗ Branch 650 → 651 not taken.
✗ Branch 650 → 1316 not taken.
✗ K(RGUI), K(MODE), K(MEDIA_NEXT_TRACK), K(MEDIA_PREVIOUS_TRACK), K(MEDIA_STOP), K(MEDIA_PLAY), K(MUTE),
56
0/8
✗ Branch 653 → 654 not taken.
✗ Branch 653 → 1309 not taken.
✗ Branch 656 → 657 not taken.
✗ Branch 656 → 1302 not taken.
✗ Branch 659 → 660 not taken.
✗ Branch 659 → 1295 not taken.
✗ Branch 662 → 663 not taken.
✗ Branch 662 → 1288 not taken.
✗ K(MEDIA_SELECT), K(AC_SEARCH), K(AC_HOME), K(AC_BACK),
57
0/8
✗ Branch 665 → 666 not taken.
✗ Branch 665 → 1281 not taken.
✗ Branch 668 → 669 not taken.
✗ Branch 668 → 1274 not taken.
✗ Branch 671 → 672 not taken.
✗ Branch 671 → 1267 not taken.
✗ Branch 674 → 675 not taken.
✗ Branch 674 → 1260 not taken.
✗ K(AC_FORWARD), K(AC_STOP), K(AC_REFRESH), K(AC_BOOKMARKS),
58
0/8
✗ Branch 677 → 678 not taken.
✗ Branch 677 → 1253 not taken.
✗ Branch 680 → 681 not taken.
✗ Branch 680 → 1246 not taken.
✗ Branch 683 → 684 not taken.
✗ Branch 683 → 1239 not taken.
✗ Branch 686 → 687 not taken.
✗ Branch 686 → 1232 not taken.
✗ K(MEDIA_EJECT), K(SLEEP), K(MEDIA_REWIND), K(MEDIA_FAST_FORWARD),
59
0/8
✗ Branch 689 → 690 not taken.
✗ Branch 689 → 1225 not taken.
✗ Branch 692 → 693 not taken.
✗ Branch 692 → 1218 not taken.
✗ Branch 695 → 696 not taken.
✗ Branch 695 → 1211 not taken.
✗ Branch 698 → 699 not taken.
✗ Branch 698 → 1204 not taken.
✗ K(SOFTLEFT), K(SOFTRIGHT), K(CALL), K(ENDCALL),
60 #undef K
61
0/12
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 1173 not taken.
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 1173 not taken.
✗ Branch 702 → 703 not taken.
✗ Branch 702 → 1192 not taken.
✗ Branch 707 → 708 not taken.
✗ Branch 707 → 709 not taken.
✗ Branch 1198 → 1199 not taken.
✗ Branch 1198 → 1200 not taken.
✗ Branch 2827 → 2828 not taken.
✗ Branch 2827 → 2829 not taken.
✗ };
62
63
0/4
✗ Branch 1173 → 1174 not taken.
✗ Branch 1173 → 2832 not taken.
✗ Branch 1174 → 1175 not taken.
✗ Branch 1174 → 2830 not taken.
✗ const auto it = key_map.find(lower(name));
64
0/2
✗ Branch 1178 → 1179 not taken.
✗ Branch 1178 → 1183 not taken.
✗ if (it != key_map.end())
65 {
66 ✗ return it->second;
67 }
68
69
0/6
✗ Branch 1183 → 1184 not taken.
✗ Branch 1183 → 2837 not taken.
✗ Branch 1184 → 1185 not taken.
✗ Branch 1184 → 2835 not taken.
✗ Branch 1185 → 1186 not taken.
✗ Branch 1185 → 2833 not taken.
✗ LOG_WARN("Unknown key name: '{}'", name);
70 ✗ return std::nullopt;
71
0/464
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 2809 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 2802 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 2795 not taken.
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 2788 not taken.
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 2781 not taken.
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 2774 not taken.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 2767 not taken.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 2760 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 2753 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 37 → 2746 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 2739 not taken.
✗ Branch 43 → 44 not taken.
✗ Branch 43 → 2732 not taken.
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 2725 not taken.
✗ Branch 49 → 50 not taken.
✗ Branch 49 → 2718 not taken.
✗ Branch 52 → 53 not taken.
✗ Branch 52 → 2711 not taken.
✗ Branch 55 → 56 not taken.
✗ Branch 55 → 2704 not taken.
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 2697 not taken.
✗ Branch 61 → 62 not taken.
✗ Branch 61 → 2690 not taken.
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 2683 not taken.
✗ Branch 67 → 68 not taken.
✗ Branch 67 → 2676 not taken.
✗ Branch 70 → 71 not taken.
✗ Branch 70 → 2669 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 2662 not taken.
✗ Branch 76 → 77 not taken.
✗ Branch 76 → 2655 not taken.
✗ Branch 79 → 80 not taken.
✗ Branch 79 → 2648 not taken.
✗ Branch 82 → 83 not taken.
✗ Branch 82 → 2641 not taken.
✗ Branch 85 → 86 not taken.
✗ Branch 85 → 2634 not taken.
✗ Branch 88 → 89 not taken.
✗ Branch 88 → 2627 not taken.
✗ Branch 91 → 92 not taken.
✗ Branch 91 → 2620 not taken.
✗ Branch 94 → 95 not taken.
✗ Branch 94 → 2613 not taken.
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 2606 not taken.
✗ Branch 100 → 101 not taken.
✗ Branch 100 → 2599 not taken.
✗ Branch 103 → 104 not taken.
✗ Branch 103 → 2592 not taken.
✗ Branch 106 → 107 not taken.
✗ Branch 106 → 2585 not taken.
✗ Branch 109 → 110 not taken.
✗ Branch 109 → 2578 not taken.
✗ Branch 112 → 113 not taken.
✗ Branch 112 → 2571 not taken.
✗ Branch 115 → 116 not taken.
✗ Branch 115 → 2564 not taken.
✗ Branch 118 → 119 not taken.
✗ Branch 118 → 2557 not taken.
✗ Branch 121 → 122 not taken.
✗ Branch 121 → 2550 not taken.
✗ Branch 124 → 125 not taken.
✗ Branch 124 → 2543 not taken.
✗ Branch 127 → 128 not taken.
✗ Branch 127 → 2536 not taken.
✗ Branch 130 → 131 not taken.
✗ Branch 130 → 2529 not taken.
✗ Branch 133 → 134 not taken.
✗ Branch 133 → 2522 not taken.
✗ Branch 136 → 137 not taken.
✗ Branch 136 → 2515 not taken.
✗ Branch 139 → 140 not taken.
✗ Branch 139 → 2508 not taken.
✗ Branch 142 → 143 not taken.
✗ Branch 142 → 2501 not taken.
✗ Branch 145 → 146 not taken.
✗ Branch 145 → 2494 not taken.
✗ Branch 148 → 149 not taken.
✗ Branch 148 → 2487 not taken.
✗ Branch 151 → 152 not taken.
✗ Branch 151 → 2480 not taken.
✗ Branch 154 → 155 not taken.
✗ Branch 154 → 2473 not taken.
✗ Branch 157 → 158 not taken.
✗ Branch 157 → 2466 not taken.
✗ Branch 160 → 161 not taken.
✗ Branch 160 → 2459 not taken.
✗ Branch 163 → 164 not taken.
✗ Branch 163 → 2452 not taken.
✗ Branch 166 → 167 not taken.
✗ Branch 166 → 2445 not taken.
✗ Branch 169 → 170 not taken.
✗ Branch 169 → 2438 not taken.
✗ Branch 172 → 173 not taken.
✗ Branch 172 → 2431 not taken.
✗ Branch 175 → 176 not taken.
✗ Branch 175 → 2424 not taken.
✗ Branch 178 → 179 not taken.
✗ Branch 178 → 2417 not taken.
✗ Branch 181 → 182 not taken.
✗ Branch 181 → 2410 not taken.
✗ Branch 184 → 185 not taken.
✗ Branch 184 → 2403 not taken.
✗ Branch 187 → 188 not taken.
✗ Branch 187 → 2396 not taken.
✗ Branch 190 → 191 not taken.
✗ Branch 190 → 2389 not taken.
✗ Branch 193 → 194 not taken.
✗ Branch 193 → 2382 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 2375 not taken.
✗ Branch 199 → 200 not taken.
✗ Branch 199 → 2368 not taken.
✗ Branch 202 → 203 not taken.
✗ Branch 202 → 2361 not taken.
✗ Branch 205 → 206 not taken.
✗ Branch 205 → 2354 not taken.
✗ Branch 208 → 209 not taken.
✗ Branch 208 → 2347 not taken.
✗ Branch 211 → 212 not taken.
✗ Branch 211 → 2340 not taken.
✗ Branch 214 → 215 not taken.
✗ Branch 214 → 2333 not taken.
✗ Branch 217 → 218 not taken.
✗ Branch 217 → 2326 not taken.
✗ Branch 220 → 221 not taken.
✗ Branch 220 → 2319 not taken.
✗ Branch 223 → 224 not taken.
✗ Branch 223 → 2312 not taken.
✗ Branch 226 → 227 not taken.
✗ Branch 226 → 2305 not taken.
✗ Branch 229 → 230 not taken.
✗ Branch 229 → 2298 not taken.
✗ Branch 232 → 233 not taken.
✗ Branch 232 → 2291 not taken.
✗ Branch 235 → 236 not taken.
✗ Branch 235 → 2284 not taken.
✗ Branch 238 → 239 not taken.
✗ Branch 238 → 2277 not taken.
✗ Branch 241 → 242 not taken.
✗ Branch 241 → 2270 not taken.
✗ Branch 244 → 245 not taken.
✗ Branch 244 → 2263 not taken.
✗ Branch 247 → 248 not taken.
✗ Branch 247 → 2256 not taken.
✗ Branch 250 → 251 not taken.
✗ Branch 250 → 2249 not taken.
✗ Branch 253 → 254 not taken.
✗ Branch 253 → 2242 not taken.
✗ Branch 256 → 257 not taken.
✗ Branch 256 → 2235 not taken.
✗ Branch 259 → 260 not taken.
✗ Branch 259 → 2228 not taken.
✗ Branch 262 → 263 not taken.
✗ Branch 262 → 2221 not taken.
✗ Branch 265 → 266 not taken.
✗ Branch 265 → 2214 not taken.
✗ Branch 268 → 269 not taken.
✗ Branch 268 → 2207 not taken.
✗ Branch 271 → 272 not taken.
✗ Branch 271 → 2200 not taken.
✗ Branch 274 → 275 not taken.
✗ Branch 274 → 2193 not taken.
✗ Branch 277 → 278 not taken.
✗ Branch 277 → 2186 not taken.
✗ Branch 280 → 281 not taken.
✗ Branch 280 → 2179 not taken.
✗ Branch 283 → 284 not taken.
✗ Branch 283 → 2172 not taken.
✗ Branch 286 → 287 not taken.
✗ Branch 286 → 2165 not taken.
✗ Branch 289 → 290 not taken.
✗ Branch 289 → 2158 not taken.
✗ Branch 292 → 293 not taken.
✗ Branch 292 → 2151 not taken.
✗ Branch 295 → 296 not taken.
✗ Branch 295 → 2144 not taken.
✗ Branch 298 → 299 not taken.
✗ Branch 298 → 2137 not taken.
✗ Branch 301 → 302 not taken.
✗ Branch 301 → 2130 not taken.
✗ Branch 304 → 305 not taken.
✗ Branch 304 → 2123 not taken.
✗ Branch 307 → 308 not taken.
✗ Branch 307 → 2116 not taken.
✗ Branch 310 → 311 not taken.
✗ Branch 310 → 2109 not taken.
✗ Branch 313 → 314 not taken.
✗ Branch 313 → 2102 not taken.
✗ Branch 316 → 317 not taken.
✗ Branch 316 → 2095 not taken.
✗ Branch 319 → 320 not taken.
✗ Branch 319 → 2088 not taken.
✗ Branch 322 → 323 not taken.
✗ Branch 322 → 2081 not taken.
✗ Branch 325 → 326 not taken.
✗ Branch 325 → 2074 not taken.
✗ Branch 328 → 329 not taken.
✗ Branch 328 → 2067 not taken.
✗ Branch 331 → 332 not taken.
✗ Branch 331 → 2060 not taken.
✗ Branch 334 → 335 not taken.
✗ Branch 334 → 2053 not taken.
✗ Branch 337 → 338 not taken.
✗ Branch 337 → 2046 not taken.
✗ Branch 340 → 341 not taken.
✗ Branch 340 → 2039 not taken.
✗ Branch 343 → 344 not taken.
✗ Branch 343 → 2032 not taken.
✗ Branch 346 → 347 not taken.
✗ Branch 346 → 2025 not taken.
✗ Branch 349 → 350 not taken.
✗ Branch 349 → 2018 not taken.
✗ Branch 352 → 353 not taken.
✗ Branch 352 → 2011 not taken.
✗ Branch 355 → 356 not taken.
✗ Branch 355 → 2004 not taken.
✗ Branch 358 → 359 not taken.
✗ Branch 358 → 1997 not taken.
✗ Branch 361 → 362 not taken.
✗ Branch 361 → 1990 not taken.
✗ Branch 364 → 365 not taken.
✗ Branch 364 → 1983 not taken.
✗ Branch 367 → 368 not taken.
✗ Branch 367 → 1976 not taken.
✗ Branch 370 → 371 not taken.
✗ Branch 370 → 1969 not taken.
✗ Branch 373 → 374 not taken.
✗ Branch 373 → 1962 not taken.
✗ Branch 376 → 377 not taken.
✗ Branch 376 → 1955 not taken.
✗ Branch 379 → 380 not taken.
✗ Branch 379 → 1948 not taken.
✗ Branch 382 → 383 not taken.
✗ Branch 382 → 1941 not taken.
✗ Branch 385 → 386 not taken.
✗ Branch 385 → 1934 not taken.
✗ Branch 388 → 389 not taken.
✗ Branch 388 → 1927 not taken.
✗ Branch 391 → 392 not taken.
✗ Branch 391 → 1920 not taken.
✗ Branch 394 → 395 not taken.
✗ Branch 394 → 1913 not taken.
✗ Branch 397 → 398 not taken.
✗ Branch 397 → 1906 not taken.
✗ Branch 400 → 401 not taken.
✗ Branch 400 → 1899 not taken.
✗ Branch 403 → 404 not taken.
✗ Branch 403 → 1892 not taken.
✗ Branch 406 → 407 not taken.
✗ Branch 406 → 1885 not taken.
✗ Branch 409 → 410 not taken.
✗ Branch 409 → 1878 not taken.
✗ Branch 412 → 413 not taken.
✗ Branch 412 → 1871 not taken.
✗ Branch 415 → 416 not taken.
✗ Branch 415 → 1864 not taken.
✗ Branch 418 → 419 not taken.
✗ Branch 418 → 1857 not taken.
✗ Branch 421 → 422 not taken.
✗ Branch 421 → 1850 not taken.
✗ Branch 424 → 425 not taken.
✗ Branch 424 → 1843 not taken.
✗ Branch 427 → 428 not taken.
✗ Branch 427 → 1836 not taken.
✗ Branch 430 → 431 not taken.
✗ Branch 430 → 1829 not taken.
✗ Branch 433 → 434 not taken.
✗ Branch 433 → 1822 not taken.
✗ Branch 436 → 437 not taken.
✗ Branch 436 → 1815 not taken.
✗ Branch 439 → 440 not taken.
✗ Branch 439 → 1808 not taken.
✗ Branch 442 → 443 not taken.
✗ Branch 442 → 1801 not taken.
✗ Branch 445 → 446 not taken.
✗ Branch 445 → 1794 not taken.
✗ Branch 448 → 449 not taken.
✗ Branch 448 → 1787 not taken.
✗ Branch 451 → 452 not taken.
✗ Branch 451 → 1780 not taken.
✗ Branch 454 → 455 not taken.
✗ Branch 454 → 1773 not taken.
✗ Branch 457 → 458 not taken.
✗ Branch 457 → 1766 not taken.
✗ Branch 460 → 461 not taken.
✗ Branch 460 → 1759 not taken.
✗ Branch 463 → 464 not taken.
✗ Branch 463 → 1752 not taken.
✗ Branch 466 → 467 not taken.
✗ Branch 466 → 1745 not taken.
✗ Branch 469 → 470 not taken.
✗ Branch 469 → 1738 not taken.
✗ Branch 472 → 473 not taken.
✗ Branch 472 → 1731 not taken.
✗ Branch 475 → 476 not taken.
✗ Branch 475 → 1724 not taken.
✗ Branch 478 → 479 not taken.
✗ Branch 478 → 1717 not taken.
✗ Branch 481 → 482 not taken.
✗ Branch 481 → 1710 not taken.
✗ Branch 484 → 485 not taken.
✗ Branch 484 → 1703 not taken.
✗ Branch 487 → 488 not taken.
✗ Branch 487 → 1696 not taken.
✗ Branch 490 → 491 not taken.
✗ Branch 490 → 1689 not taken.
✗ Branch 493 → 494 not taken.
✗ Branch 493 → 1682 not taken.
✗ Branch 496 → 497 not taken.
✗ Branch 496 → 1675 not taken.
✗ Branch 499 → 500 not taken.
✗ Branch 499 → 1668 not taken.
✗ Branch 502 → 503 not taken.
✗ Branch 502 → 1661 not taken.
✗ Branch 505 → 506 not taken.
✗ Branch 505 → 1654 not taken.
✗ Branch 508 → 509 not taken.
✗ Branch 508 → 1647 not taken.
✗ Branch 511 → 512 not taken.
✗ Branch 511 → 1640 not taken.
✗ Branch 514 → 515 not taken.
✗ Branch 514 → 1633 not taken.
✗ Branch 517 → 518 not taken.
✗ Branch 517 → 1626 not taken.
✗ Branch 520 → 521 not taken.
✗ Branch 520 → 1619 not taken.
✗ Branch 523 → 524 not taken.
✗ Branch 523 → 1612 not taken.
✗ Branch 526 → 527 not taken.
✗ Branch 526 → 1605 not taken.
✗ Branch 529 → 530 not taken.
✗ Branch 529 → 1598 not taken.
✗ Branch 532 → 533 not taken.
✗ Branch 532 → 1591 not taken.
✗ Branch 535 → 536 not taken.
✗ Branch 535 → 1584 not taken.
✗ Branch 538 → 539 not taken.
✗ Branch 538 → 1577 not taken.
✗ Branch 541 → 542 not taken.
✗ Branch 541 → 1570 not taken.
✗ Branch 544 → 545 not taken.
✗ Branch 544 → 1563 not taken.
✗ Branch 547 → 548 not taken.
✗ Branch 547 → 1556 not taken.
✗ Branch 550 → 551 not taken.
✗ Branch 550 → 1549 not taken.
✗ Branch 553 → 554 not taken.
✗ Branch 553 → 1542 not taken.
✗ Branch 556 → 557 not taken.
✗ Branch 556 → 1535 not taken.
✗ Branch 559 → 560 not taken.
✗ Branch 559 → 1528 not taken.
✗ Branch 562 → 563 not taken.
✗ Branch 562 → 1521 not taken.
✗ Branch 565 → 566 not taken.
✗ Branch 565 → 1514 not taken.
✗ Branch 568 → 569 not taken.
✗ Branch 568 → 1507 not taken.
✗ Branch 571 → 572 not taken.
✗ Branch 571 → 1500 not taken.
✗ Branch 574 → 575 not taken.
✗ Branch 574 → 1493 not taken.
✗ Branch 577 → 578 not taken.
✗ Branch 577 → 1486 not taken.
✗ Branch 580 → 581 not taken.
✗ Branch 580 → 1479 not taken.
✗ Branch 583 → 584 not taken.
✗ Branch 583 → 1472 not taken.
✗ Branch 586 → 587 not taken.
✗ Branch 586 → 1465 not taken.
✗ Branch 589 → 590 not taken.
✗ Branch 589 → 1458 not taken.
✗ Branch 592 → 593 not taken.
✗ Branch 592 → 1451 not taken.
✗ Branch 595 → 596 not taken.
✗ Branch 595 → 1444 not taken.
✗ Branch 598 → 599 not taken.
✗ Branch 598 → 1437 not taken.
✗ Branch 601 → 602 not taken.
✗ Branch 601 → 1430 not taken.
✗ Branch 604 → 605 not taken.
✗ Branch 604 → 1423 not taken.
✗ Branch 607 → 608 not taken.
✗ Branch 607 → 1416 not taken.
✗ Branch 610 → 611 not taken.
✗ Branch 610 → 1409 not taken.
✗ Branch 613 → 614 not taken.
✗ Branch 613 → 1402 not taken.
✗ Branch 616 → 617 not taken.
✗ Branch 616 → 1395 not taken.
✗ Branch 619 → 620 not taken.
✗ Branch 619 → 1388 not taken.
✗ Branch 622 → 623 not taken.
✗ Branch 622 → 1381 not taken.
✗ Branch 625 → 626 not taken.
✗ Branch 625 → 1374 not taken.
✗ Branch 628 → 629 not taken.
✗ Branch 628 → 1367 not taken.
✗ Branch 631 → 632 not taken.
✗ Branch 631 → 1360 not taken.
✗ Branch 634 → 635 not taken.
✗ Branch 634 → 1353 not taken.
✗ Branch 637 → 638 not taken.
✗ Branch 637 → 1346 not taken.
✗ Branch 640 → 641 not taken.
✗ Branch 640 → 1339 not taken.
✗ Branch 643 → 644 not taken.
✗ Branch 643 → 1332 not taken.
✗ Branch 646 → 647 not taken.
✗ Branch 646 → 1325 not taken.
✗ Branch 649 → 650 not taken.
✗ Branch 649 → 1318 not taken.
✗ Branch 652 → 653 not taken.
✗ Branch 652 → 1311 not taken.
✗ Branch 655 → 656 not taken.
✗ Branch 655 → 1304 not taken.
✗ Branch 658 → 659 not taken.
✗ Branch 658 → 1297 not taken.
✗ Branch 661 → 662 not taken.
✗ Branch 661 → 1290 not taken.
✗ Branch 664 → 665 not taken.
✗ Branch 664 → 1283 not taken.
✗ Branch 667 → 668 not taken.
✗ Branch 667 → 1276 not taken.
✗ Branch 670 → 671 not taken.
✗ Branch 670 → 1269 not taken.
✗ Branch 673 → 674 not taken.
✗ Branch 673 → 1262 not taken.
✗ Branch 676 → 677 not taken.
✗ Branch 676 → 1255 not taken.
✗ Branch 679 → 680 not taken.
✗ Branch 679 → 1248 not taken.
✗ Branch 682 → 683 not taken.
✗ Branch 682 → 1241 not taken.
✗ Branch 685 → 686 not taken.
✗ Branch 685 → 1234 not taken.
✗ Branch 688 → 689 not taken.
✗ Branch 688 → 1227 not taken.
✗ Branch 691 → 692 not taken.
✗ Branch 691 → 1220 not taken.
✗ Branch 694 → 695 not taken.
✗ Branch 694 → 1213 not taken.
✗ Branch 697 → 698 not taken.
✗ Branch 697 → 1206 not taken.
✗ Branch 2821 → 2822 not taken.
✗ Branch 2821 → 2825 not taken.
✗ Branch 2823 → 2824 not taken.
✗ Branch 2823 → 2825 not taken.
✗ }
72
73 ✗ bool Input::load_from_file(const std::string& path)
74 {
75
0/4
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 110 not taken.
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 108 not taken.
✗ const auto parsed = kdl::parse(eu::io::string_from_file(path));
76
0/2
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 13 not taken.
✗ if (parsed.document.has_value() == false)
77 {
78
0/6
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 146 not taken.
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 113 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 111 not taken.
✗ LOG_WARN("Failed to parse {}: '{}'", path, parsed.error);
79 ✗ return false;
80 }
81
82 ✗ const auto& doc = *parsed.document;
83
84 ✗ bool ok = true;
85
86
0/2
✗ Branch 98 → 16 not taken.
✗ Branch 98 → 99 not taken.
✗ for (const auto& node : doc)
87 {
88
0/4
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 145 not taken.
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 45 not taken.
✗ if (node.name == "action")
89 {
90
0/4
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 127 not taken.
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 127 not taken.
✗ const auto name = node.args[0].as_string();
91
92
0/2
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 125 not taken.
✗ const auto existing = index_from_action.find(name);
93
0/2
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 32 not taken.
✗ if (existing != index_from_action.end())
94 {
95
0/6
✗ Branch 27 → 28 not taken.
✗ Branch 27 → 125 not taken.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 117 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 115 not taken.
✗ LOG_WARN("Duplicate action found: '{}'", name);
96 ✗ ok = false;
97 ✗ continue;
98 }
99 ✗ const auto new_index = actions.size();
100
0/8
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 124 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 119 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 38 not taken.
✗ Branch 121 → 122 not taken.
✗ Branch 121 → 123 not taken.
✗ actions.emplace_back(Action{
101 .name = name,
102 .is_down = false,
103 .last_down = false
104 });
105
0/2
✗ Branch 38 → 39 not taken.
✗ Branch 38 → 125 not taken.
✗ index_from_action[name] = new_index;
106
0/2
✗ Branch 41 → 42 not taken.
✗ Branch 41 → 44 not taken.
✗ }
107
0/4
✗ Branch 45 → 46 not taken.
✗ Branch 45 → 145 not taken.
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 84 not taken.
✗ else if (node.name == "key")
108 {
109
0/4
✗ Branch 48 → 49 not taken.
✗ Branch 48 → 140 not taken.
✗ Branch 49 → 50 not taken.
✗ Branch 49 → 140 not taken.
✗ const auto action_name = node.args[0].as_string();
110
0/2
✗ Branch 50 → 51 not taken.
✗ Branch 50 → 138 not taken.
✗ const auto found_action = index_from_action.find(action_name);
111
0/2
✗ Branch 53 → 54 not taken.
✗ Branch 53 → 59 not taken.
✗ if (found_action == index_from_action.end())
112 {
113
0/6
✗ Branch 54 → 55 not taken.
✗ Branch 54 → 138 not taken.
✗ Branch 55 → 56 not taken.
✗ Branch 55 → 130 not taken.
✗ Branch 56 → 57 not taken.
✗ Branch 56 → 128 not taken.
✗ LOG_WARN("Invalid action name: {}", action_name);
114 ✗ ok = false;
115 ✗ continue;
116 }
117
118
0/4
✗ Branch 60 → 61 not taken.
✗ Branch 60 → 138 not taken.
✗ Branch 61 → 62 not taken.
✗ Branch 61 → 138 not taken.
✗ const auto key_name = node.args[1].as_string();
119
0/2
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 136 not taken.
✗ const auto key = key_from_name(key_name);
120
0/2
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 70 not taken.
✗ if (!key)
121 {
122
0/6
✗ Branch 65 → 66 not taken.
✗ Branch 65 → 136 not taken.
✗ Branch 66 → 67 not taken.
✗ Branch 66 → 134 not taken.
✗ Branch 67 → 68 not taken.
✗ Branch 67 → 132 not taken.
✗ LOG_WARN("Invalid key name: {}", key_name);
123 ✗ ok = false;
124 ✗ continue;
125 }
126
127 const auto bind = KeyBind{
128 ✗ .sdl_keyboard_key = *key,
129 ✗ .bind_action = found_action->second
130 ✗ };
131
0/2
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 136 not taken.
✗ bind_from_key[*key] = bind;
132
0/4
✗ Branch 76 → 77 not taken.
✗ Branch 76 → 78 not taken.
✗ Branch 80 → 81 not taken.
✗ Branch 80 → 83 not taken.
✗ }
133 else
134 {
135
0/6
✗ Branch 84 → 85 not taken.
✗ Branch 84 → 145 not taken.
✗ Branch 85 → 86 not taken.
✗ Branch 85 → 143 not taken.
✗ Branch 86 → 87 not taken.
✗ Branch 86 → 141 not taken.
✗ LOG_WARN("Unknown node in input file: '{}'", node.name);
136 ✗ ok = false;
137 }
138 }
139
140
0/4
✗ Branch 99 → 100 not taken.
✗ Branch 99 → 103 not taken.
✗ Branch 101 → 102 not taken.
✗ Branch 101 → 103 not taken.
✗ return ok && !bind_from_key.empty();
141 ✗ }
142
143
144 ✗ void Input::update()
145 {
146
0/2
✗ Branch 15 → 4 not taken.
✗ Branch 15 → 16 not taken.
✗ for (auto& action : actions)
147 {
148 ✗ action.last_down = action.is_down;
149 }
150 ✗ }
151
152
153 ✗ void Input::on_key(int key, bool state)
154 {
155
0/2
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 11 not taken.
✗ const auto found = bind_from_key.find(key);
156
0/2
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
✗ if (found == bind_from_key.end())
157 {
158 ✗ return;
159 }
160
161 ✗ const KeyBind& bind = found->second;
162 ✗ auto& action = actions[bind.bind_action];
163 ✗ action.is_down = state;
164 }
165
166
167 ✗ InputFrame Input::get_current_frame() const
168 {
169 ✗ InputFrame ret;
170
0/2
✗ Branch 26 → 4 not taken.
✗ Branch 26 → 27 not taken.
✗ for (const auto& a: actions)
171 {
172
0/6
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 33 not taken.
✗ ret.binds.emplace_back(ScriptBind{
173
0/2
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 34 not taken.
✗ .name = a.name,
174
0/2
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
✗ .current = a.is_down ? 1.0f : 0.0f,
175
0/2
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ .last = a.last_down ? 1.0f : 0.0f
176 });
177 }
178 ✗ return ret;
179 ✗ }
180
181
182
183 }
184