Commit 458095a
authored
Rollup merge of #137107 - thaliaarchi:io-optional-methods/cursors, r=joboet
Override default `Write` methods for cursor-like types
Override the default `io::Write` methods for cursor-like types to provide more efficient versions.
Writes to resizable containers already write everything, so implement `write_all` and `write_all_vectored` in terms of those. For fixed-sized containers, cut out unnecessary error checking and looping for those same methods.
| `impl Write for T` | `vectored` | `all` | `all_vectored` | `fmt` |
| ------------------------------- | ---------- | ----- | -------------- | ------- |
| `&mut [u8]` | Y | Y | new | |
| `Vec<u8>` | Y | Y | new | #137762 |
| `VecDeque<u8>` | Y | Y | new | #137762 |
| `std::io::Cursor<&mut [u8]>` | Y | new | new | |
| `std::io::Cursor<&mut Vec<u8>>` | Y | new | new | #137762 |
| `std::io::Cursor<Vec<u8>>` | Y | new | new | #137762 |
| `std::io::Cursor<Box<[u8]>>` | Y | new | new | |
| `std::io::Cursor<[u8; N]>` | Y | new | new | |
| `core::io::BorrowedCursor<'_>` | new | new | new | |
Tracked in rust-lang/rust#136756.
# Open questions
Is it guaranteed by `Write::write_all` that the maximal write is performed when not everything can be written? Its documentation describes the behavior of the default implementation, which writes until a 0-length write is encountered, thus implying that a maximal write is expected. In contrast, `Read::read_exact` declares that the contents of the buffer are unspecified for short reads. If it were allowed, these cursor-like types could bail on the write altogether if it has insufficient capacity.2 files changed
+146
-14
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
439 | 439 | | |
440 | 440 | | |
441 | 441 | | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
442 | 463 | | |
443 | 464 | | |
444 | 465 | | |
| |||
481 | 502 | | |
482 | 503 | | |
483 | 504 | | |
484 | | - | |
485 | | - | |
486 | | - | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
487 | 511 | | |
488 | 512 | | |
489 | 513 | | |
| |||
492 | 516 | | |
493 | 517 | | |
494 | 518 | | |
495 | | - | |
| 519 | + | |
496 | 520 | | |
497 | 521 | | |
498 | 522 | | |
| |||
501 | 525 | | |
502 | 526 | | |
503 | 527 | | |
504 | | - | |
| 528 | + | |
505 | 529 | | |
506 | 530 | | |
507 | 531 | | |
| |||
512 | 536 | | |
513 | 537 | | |
514 | 538 | | |
515 | | - | |
| 539 | + | |
516 | 540 | | |
517 | 541 | | |
518 | 542 | | |
| |||
523 | 547 | | |
524 | 548 | | |
525 | 549 | | |
526 | | - | |
| 550 | + | |
527 | 551 | | |
528 | 552 | | |
529 | 553 | | |
| |||
532 | 556 | | |
533 | 557 | | |
534 | 558 | | |
535 | | - | |
| 559 | + | |
536 | 560 | | |
537 | 561 | | |
538 | 562 | | |
| |||
550 | 574 | | |
551 | 575 | | |
552 | 576 | | |
553 | | - | |
| 577 | + | |
554 | 578 | | |
555 | 579 | | |
556 | 580 | | |
| |||
579 | 603 | | |
580 | 604 | | |
581 | 605 | | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
582 | 616 | | |
583 | 617 | | |
584 | 618 | | |
| |||
591 | 625 | | |
592 | 626 | | |
593 | 627 | | |
594 | | - | |
| 628 | + | |
595 | 629 | | |
596 | 630 | | |
597 | 631 | | |
598 | | - | |
| 632 | + | |
599 | 633 | | |
600 | 634 | | |
601 | 635 | | |
602 | 636 | | |
603 | 637 | | |
604 | 638 | | |
605 | 639 | | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
606 | 650 | | |
607 | 651 | | |
608 | 652 | | |
| |||
615 | 659 | | |
616 | 660 | | |
617 | 661 | | |
618 | | - | |
| 662 | + | |
619 | 663 | | |
620 | 664 | | |
621 | 665 | | |
622 | | - | |
| 666 | + | |
623 | 667 | | |
624 | 668 | | |
625 | 669 | | |
626 | 670 | | |
627 | 671 | | |
628 | 672 | | |
629 | 673 | | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
630 | 684 | | |
631 | 685 | | |
632 | 686 | | |
| |||
653 | 707 | | |
654 | 708 | | |
655 | 709 | | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
656 | 720 | | |
657 | 721 | | |
658 | 722 | | |
| |||
676 | 740 | | |
677 | 741 | | |
678 | 742 | | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
679 | 753 | | |
680 | 754 | | |
681 | 755 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
455 | 455 | | |
456 | 456 | | |
457 | 457 | | |
458 | | - | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
459 | 469 | | |
460 | 470 | | |
461 | 471 | | |
| |||
495 | 505 | | |
496 | 506 | | |
497 | 507 | | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
498 | 514 | | |
499 | 515 | | |
500 | 516 | | |
| |||
515 | 531 | | |
516 | 532 | | |
517 | 533 | | |
| 534 | + | |
518 | 535 | | |
519 | 536 | | |
520 | 537 | | |
| |||
547 | 564 | | |
548 | 565 | | |
549 | 566 | | |
| 567 | + | |
550 | 568 | | |
551 | 569 | | |
552 | 570 | | |
| |||
638 | 656 | | |
639 | 657 | | |
640 | 658 | | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
641 | 665 | | |
642 | 666 | | |
643 | 667 | | |
| |||
646 | 670 | | |
647 | 671 | | |
648 | 672 | | |
| 673 | + | |
649 | 674 | | |
650 | 675 | | |
651 | 676 | | |
652 | 677 | | |
653 | 678 | | |
654 | 679 | | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
655 | 713 | | |
656 | 714 | | |
657 | 715 | | |
| |||
0 commit comments