Commit 98fd158
committed
Optimization for grapheme iteration.
Typical text involves a lot of chars one-after-another that
are in a similar scalar value range and in the same category. This
commit takes advantage of that to speed up grapheme iteration by
caching the range and category of the last char, and always checking
against that cache first before doing a binary search on the whole
grapheme category table.
This results in significant speed ups on many texts, in some cases
up to 2x faster.1 parent ac54e2d commit 98fd158
File tree
5 files changed
+89
-46
lines changed- scripts
- src
5 files changed
+89
-46
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
280 | 280 | | |
281 | 281 | | |
282 | 282 | | |
283 | | - | |
| 283 | + | |
284 | 284 | | |
285 | 285 | | |
286 | 286 | | |
287 | 287 | | |
288 | 288 | | |
289 | 289 | | |
290 | 290 | | |
291 | | - | |
292 | | - | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
293 | 300 | | |
294 | | - | |
295 | 301 | | |
296 | 302 | | |
297 | 303 | | |
298 | | - | |
| 304 | + | |
299 | 305 | | |
300 | 306 | | |
301 | 307 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
| 181 | + | |
| 182 | + | |
181 | 183 | | |
182 | 184 | | |
183 | 185 | | |
| |||
276 | 278 | | |
277 | 279 | | |
278 | 280 | | |
| 281 | + | |
279 | 282 | | |
280 | 283 | | |
281 | 284 | | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
282 | 295 | | |
283 | 296 | | |
284 | 297 | | |
| |||
349 | 362 | | |
350 | 363 | | |
351 | 364 | | |
352 | | - | |
| 365 | + | |
353 | 366 | | |
354 | 367 | | |
355 | 368 | | |
| |||
359 | 372 | | |
360 | 373 | | |
361 | 374 | | |
362 | | - | |
| 375 | + | |
363 | 376 | | |
364 | 377 | | |
365 | 378 | | |
| |||
393 | 406 | | |
394 | 407 | | |
395 | 408 | | |
396 | | - | |
| 409 | + | |
397 | 410 | | |
398 | 411 | | |
399 | 412 | | |
| |||
413 | 426 | | |
414 | 427 | | |
415 | 428 | | |
416 | | - | |
| 429 | + | |
417 | 430 | | |
418 | 431 | | |
419 | 432 | | |
420 | 433 | | |
421 | 434 | | |
422 | | - | |
| 435 | + | |
423 | 436 | | |
424 | 437 | | |
425 | 438 | | |
| |||
481 | 494 | | |
482 | 495 | | |
483 | 496 | | |
484 | | - | |
| 497 | + | |
485 | 498 | | |
486 | 499 | | |
487 | 500 | | |
| |||
497 | 510 | | |
498 | 511 | | |
499 | 512 | | |
500 | | - | |
| 513 | + | |
501 | 514 | | |
502 | 515 | | |
503 | 516 | | |
| |||
562 | 575 | | |
563 | 576 | | |
564 | 577 | | |
565 | | - | |
| 578 | + | |
566 | 579 | | |
567 | 580 | | |
568 | 581 | | |
569 | 582 | | |
570 | 583 | | |
571 | 584 | | |
572 | | - | |
| 585 | + | |
573 | 586 | | |
574 | 587 | | |
575 | 588 | | |
| |||
578 | 591 | | |
579 | 592 | | |
580 | 593 | | |
581 | | - | |
| 594 | + | |
582 | 595 | | |
583 | 596 | | |
584 | 597 | | |
| |||
644 | 657 | | |
645 | 658 | | |
646 | 659 | | |
647 | | - | |
| 660 | + | |
648 | 661 | | |
649 | 662 | | |
650 | 663 | | |
| |||
654 | 667 | | |
655 | 668 | | |
656 | 669 | | |
657 | | - | |
| 670 | + | |
658 | 671 | | |
659 | 672 | | |
660 | 673 | | |
661 | 674 | | |
662 | | - | |
| 675 | + | |
663 | 676 | | |
664 | 677 | | |
665 | 678 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
115 | 115 | | |
116 | 116 | | |
117 | 117 | | |
118 | | - | |
| 118 | + | |
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| |||
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
185 | | - | |
| 185 | + | |
186 | 186 | | |
187 | 187 | | |
188 | 188 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
345 | 345 | | |
346 | 346 | | |
347 | 347 | | |
348 | | - | |
| 348 | + | |
349 | 349 | | |
350 | 350 | | |
351 | 351 | | |
352 | 352 | | |
353 | 353 | | |
354 | 354 | | |
355 | 355 | | |
356 | | - | |
357 | | - | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
358 | 365 | | |
359 | | - | |
360 | 366 | | |
361 | 367 | | |
362 | 368 | | |
363 | | - | |
| 369 | + | |
364 | 370 | | |
365 | 371 | | |
366 | 372 | | |
| |||
980 | 986 | | |
981 | 987 | | |
982 | 988 | | |
983 | | - | |
| 989 | + | |
984 | 990 | | |
985 | 991 | | |
986 | 992 | | |
987 | 993 | | |
988 | 994 | | |
989 | 995 | | |
990 | 996 | | |
991 | | - | |
992 | | - | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
993 | 1006 | | |
994 | | - | |
995 | 1007 | | |
996 | 1008 | | |
997 | 1009 | | |
998 | | - | |
| 1010 | + | |
999 | 1011 | | |
1000 | 1012 | | |
1001 | 1013 | | |
| |||
1439 | 1451 | | |
1440 | 1452 | | |
1441 | 1453 | | |
1442 | | - | |
| 1454 | + | |
1443 | 1455 | | |
1444 | 1456 | | |
1445 | 1457 | | |
1446 | 1458 | | |
1447 | 1459 | | |
1448 | 1460 | | |
1449 | 1461 | | |
1450 | | - | |
1451 | | - | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
| 1465 | + | |
| 1466 | + | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
1452 | 1471 | | |
1453 | | - | |
1454 | 1472 | | |
1455 | 1473 | | |
1456 | 1474 | | |
1457 | | - | |
| 1475 | + | |
1458 | 1476 | | |
1459 | 1477 | | |
1460 | 1478 | | |
| |||
1535 | 1553 | | |
1536 | 1554 | | |
1537 | 1555 | | |
1538 | | - | |
| 1556 | + | |
1539 | 1557 | | |
1540 | 1558 | | |
1541 | 1559 | | |
1542 | 1560 | | |
1543 | 1561 | | |
1544 | 1562 | | |
1545 | 1563 | | |
1546 | | - | |
1547 | | - | |
| 1564 | + | |
| 1565 | + | |
| 1566 | + | |
| 1567 | + | |
| 1568 | + | |
| 1569 | + | |
| 1570 | + | |
| 1571 | + | |
| 1572 | + | |
1548 | 1573 | | |
1549 | | - | |
1550 | 1574 | | |
1551 | 1575 | | |
1552 | 1576 | | |
1553 | | - | |
| 1577 | + | |
1554 | 1578 | | |
1555 | 1579 | | |
1556 | 1580 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
125 | 125 | | |
126 | 126 | | |
127 | 127 | | |
128 | | - | |
| 128 | + | |
129 | 129 | | |
130 | 130 | | |
131 | 131 | | |
| |||
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
167 | | - | |
| 167 | + | |
168 | 168 | | |
169 | 169 | | |
170 | 170 | | |
| |||
391 | 391 | | |
392 | 392 | | |
393 | 393 | | |
394 | | - | |
| 394 | + | |
395 | 395 | | |
396 | 396 | | |
397 | 397 | | |
| |||
533 | 533 | | |
534 | 534 | | |
535 | 535 | | |
536 | | - | |
| 536 | + | |
537 | 537 | | |
538 | 538 | | |
539 | 539 | | |
| |||
624 | 624 | | |
625 | 625 | | |
626 | 626 | | |
627 | | - | |
| 627 | + | |
628 | 628 | | |
629 | 629 | | |
630 | 630 | | |
| |||
635 | 635 | | |
636 | 636 | | |
637 | 637 | | |
638 | | - | |
| 638 | + | |
639 | 639 | | |
640 | 640 | | |
641 | 641 | | |
| |||
0 commit comments