Commit f3de2f8
committed
refactor split_str_once
Rewrite `split_str_once` to be more robust, to handle Unicode, and to return length and position information rather than modifying the source string, taking the approach also used by `str_wrap_to_width`. In combination with the new length variants of common string utility functions, this allows strings to be split without copying them. In many cases, using the old design, strings were copied multiple times per frame in numerous places.
Includes unit tests to handle numerous usual and unusual cases. All of the historical string splitting anomalies should now be fixed, including a bug in the retail algorithm where an exactly matching string followed by whitespace wasn't split properly.
A followup PR will refactor `split_str`.1 parent fddedb3 commit f3de2f8
10 files changed
Lines changed: 488 additions & 423 deletions
File tree
- code
- hud
- missionui
- mission
- parse
- scripting/api/libs
- test/src
- parse
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
104 | 104 | | |
105 | 105 | | |
106 | 106 | | |
107 | | - | |
108 | 107 | | |
109 | 108 | | |
110 | 109 | | |
| |||
293 | 292 | | |
294 | 293 | | |
295 | 294 | | |
296 | | - | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
312 | | - | |
313 | | - | |
314 | | - | |
315 | | - | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
323 | 309 | | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
328 | | - | |
| 310 | + | |
329 | 311 | | |
330 | 312 | | |
331 | 313 | | |
332 | | - | |
| 314 | + | |
333 | 315 | | |
334 | 316 | | |
335 | 317 | | |
336 | | - | |
| 318 | + | |
337 | 319 | | |
338 | 320 | | |
339 | 321 | | |
| |||
829 | 811 | | |
830 | 812 | | |
831 | 813 | | |
832 | | - | |
833 | 814 | | |
834 | 815 | | |
835 | | - | |
836 | | - | |
837 | | - | |
838 | | - | |
839 | | - | |
840 | | - | |
841 | | - | |
842 | | - | |
| 816 | + | |
843 | 817 | | |
| 818 | + | |
| 819 | + | |
844 | 820 | | |
845 | | - | |
846 | | - | |
847 | | - | |
848 | | - | |
849 | | - | |
850 | | - | |
851 | | - | |
852 | | - | |
853 | | - | |
854 | | - | |
855 | | - | |
856 | | - | |
857 | | - | |
858 | | - | |
859 | | - | |
860 | | - | |
861 | | - | |
862 | 821 | | |
863 | | - | |
864 | | - | |
865 | | - | |
866 | | - | |
867 | | - | |
868 | | - | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
869 | 844 | | |
870 | 845 | | |
871 | 846 | | |
872 | 847 | | |
873 | 848 | | |
874 | 849 | | |
875 | | - | |
876 | 850 | | |
877 | 851 | | |
878 | 852 | | |
| |||
1050 | 1024 | | |
1051 | 1025 | | |
1052 | 1026 | | |
1053 | | - | |
1054 | | - | |
| 1027 | + | |
1055 | 1028 | | |
1056 | 1029 | | |
1057 | 1030 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
123 | | - | |
| 123 | + | |
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
437 | 437 | | |
438 | 438 | | |
439 | 439 | | |
440 | | - | |
| 440 | + | |
441 | 441 | | |
442 | 442 | | |
443 | | - | |
| 443 | + | |
444 | 444 | | |
445 | 445 | | |
446 | 446 | | |
447 | 447 | | |
448 | 448 | | |
449 | 449 | | |
450 | | - | |
| 450 | + | |
451 | 451 | | |
452 | | - | |
453 | | - | |
454 | | - | |
455 | | - | |
456 | | - | |
457 | | - | |
| 452 | + | |
458 | 453 | | |
459 | 454 | | |
460 | | - | |
| 455 | + | |
461 | 456 | | |
462 | | - | |
| 457 | + | |
463 | 458 | | |
464 | 459 | | |
465 | 460 | | |
466 | | - | |
467 | | - | |
468 | | - | |
469 | | - | |
470 | | - | |
471 | | - | |
472 | | - | |
473 | | - | |
474 | 461 | | |
475 | 462 | | |
476 | 463 | | |
477 | 464 | | |
478 | 465 | | |
479 | 466 | | |
480 | | - | |
481 | | - | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
482 | 471 | | |
483 | 472 | | |
484 | | - | |
485 | | - | |
| 473 | + | |
| 474 | + | |
486 | 475 | | |
487 | | - | |
488 | | - | |
489 | | - | |
490 | | - | |
491 | | - | |
492 | | - | |
493 | | - | |
494 | | - | |
495 | | - | |
496 | | - | |
497 | | - | |
498 | | - | |
499 | | - | |
500 | | - | |
501 | | - | |
502 | | - | |
503 | | - | |
504 | | - | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
505 | 492 | | |
506 | 493 | | |
507 | 494 | | |
508 | 495 | | |
509 | 496 | | |
510 | | - | |
| 497 | + | |
511 | 498 | | |
512 | 499 | | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
513 | 504 | | |
514 | | - | |
| 505 | + | |
515 | 506 | | |
516 | 507 | | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | 508 | | |
521 | 509 | | |
522 | 510 | | |
| |||
691 | 679 | | |
692 | 680 | | |
693 | 681 | | |
694 | | - | |
695 | | - | |
| 682 | + | |
696 | 683 | | |
697 | 684 | | |
698 | 685 | | |
| |||
701 | 688 | | |
702 | 689 | | |
703 | 690 | | |
704 | | - | |
705 | | - | |
| 691 | + | |
706 | 692 | | |
707 | 693 | | |
708 | 694 | | |
| |||
0 commit comments