Skip to content

Commit ead8d81

Browse files
authored
Rollup merge of #60334 - sfackler:stable-iovec, r=alexcrichton
Stabilized vectored IO This renames `std::io::IoVec` to `std::io::IoSlice` and `std::io::IoVecMut` to `std::io::IoSliceMut`, and stabilizes `std::io::IoSlice`, `std::io::IoSliceMut`, `std::io::Read::read_vectored`, and `std::io::Write::write_vectored`. Closes #58452 r? @alexcrichton
2 parents 67b7f57 + 89ff7cd commit ead8d81

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+294
-280
lines changed

src/libstd/fs.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
use crate::fmt;
1313
use crate::ffi::OsString;
14-
use crate::io::{self, SeekFrom, Seek, Read, Initializer, Write, IoVec, IoVecMut};
14+
use crate::io::{self, SeekFrom, Seek, Read, Initializer, Write, IoSlice, IoSliceMut};
1515
use crate::path::{Path, PathBuf};
1616
use crate::sys::fs as fs_imp;
1717
use crate::sys_common::{AsInnerMut, FromInner, AsInner, IntoInner};
@@ -617,7 +617,7 @@ impl Read for File {
617617
self.inner.read(buf)
618618
}
619619

620-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
620+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
621621
self.inner.read_vectored(bufs)
622622
}
623623

@@ -632,7 +632,7 @@ impl Write for File {
632632
self.inner.write(buf)
633633
}
634634

635-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
635+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
636636
self.inner.write_vectored(bufs)
637637
}
638638

@@ -650,7 +650,7 @@ impl Read for &File {
650650
self.inner.read(buf)
651651
}
652652

653-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
653+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
654654
self.inner.read_vectored(bufs)
655655
}
656656

@@ -665,7 +665,7 @@ impl Write for &File {
665665
self.inner.write(buf)
666666
}
667667

668-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
668+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
669669
self.inner.write_vectored(bufs)
670670
}
671671

src/libstd/io/buffered.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use crate::io::prelude::*;
55
use crate::cmp;
66
use crate::error;
77
use crate::fmt;
8-
use crate::io::{self, Initializer, DEFAULT_BUF_SIZE, Error, ErrorKind, SeekFrom, IoVec, IoVecMut};
8+
use crate::io::{self, Initializer, DEFAULT_BUF_SIZE, Error, ErrorKind, SeekFrom, IoSlice,
9+
IoSliceMut};
910
use crate::memchr;
1011

1112
/// The `BufReader` struct adds buffering to any reader.
@@ -249,7 +250,7 @@ impl<R: Read> Read for BufReader<R> {
249250
Ok(nread)
250251
}
251252

252-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
253+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
253254
let total_len = bufs.iter().map(|b| b.len()).sum::<usize>();
254255
if self.pos == self.cap && total_len >= self.buf.len() {
255256
self.discard_buffer();
@@ -609,7 +610,7 @@ impl<W: Write> Write for BufWriter<W> {
609610
}
610611
}
611612

612-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
613+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
613614
let total_len = bufs.iter().map(|b| b.len()).sum::<usize>();
614615
if self.buf.len() + total_len > self.buf.capacity() {
615616
self.flush_buf()?;

src/libstd/io/cursor.rs

Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::io::prelude::*;
22

33
use crate::cmp;
4-
use crate::io::{self, Initializer, SeekFrom, Error, ErrorKind, IoVec, IoVecMut};
4+
use crate::io::{self, Initializer, SeekFrom, Error, ErrorKind, IoSlice, IoSliceMut};
55

66
use core::convert::TryInto;
77

@@ -230,7 +230,7 @@ impl<T> Read for Cursor<T> where T: AsRef<[u8]> {
230230
Ok(n)
231231
}
232232

233-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
233+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
234234
let mut nread = 0;
235235
for buf in bufs {
236236
let n = self.read(buf)?;
@@ -275,7 +275,7 @@ fn slice_write(pos_mut: &mut u64, slice: &mut [u8], buf: &[u8]) -> io::Result<us
275275
fn slice_write_vectored(
276276
pos_mut: &mut u64,
277277
slice: &mut [u8],
278-
bufs: &[IoVec<'_>],
278+
bufs: &[IoSlice<'_>],
279279
) -> io::Result<usize>
280280
{
281281
let mut nwritten = 0;
@@ -319,7 +319,7 @@ fn vec_write(pos_mut: &mut u64, vec: &mut Vec<u8>, buf: &[u8]) -> io::Result<usi
319319
fn vec_write_vectored(
320320
pos_mut: &mut u64,
321321
vec: &mut Vec<u8>,
322-
bufs: &[IoVec<'_>],
322+
bufs: &[IoSlice<'_>],
323323
) -> io::Result<usize>
324324
{
325325
let mut nwritten = 0;
@@ -337,7 +337,7 @@ impl Write for Cursor<&mut [u8]> {
337337
}
338338

339339
#[inline]
340-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
340+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
341341
slice_write_vectored(&mut self.pos, self.inner, bufs)
342342
}
343343

@@ -350,7 +350,7 @@ impl Write for Cursor<&mut Vec<u8>> {
350350
vec_write(&mut self.pos, self.inner, buf)
351351
}
352352

353-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
353+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
354354
vec_write_vectored(&mut self.pos, self.inner, bufs)
355355
}
356356

@@ -363,7 +363,7 @@ impl Write for Cursor<Vec<u8>> {
363363
vec_write(&mut self.pos, &mut self.inner, buf)
364364
}
365365

366-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
366+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
367367
vec_write_vectored(&mut self.pos, &mut self.inner, bufs)
368368
}
369369

@@ -378,7 +378,7 @@ impl Write for Cursor<Box<[u8]>> {
378378
}
379379

380380
#[inline]
381-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
381+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
382382
slice_write_vectored(&mut self.pos, &mut self.inner, bufs)
383383
}
384384

@@ -388,7 +388,7 @@ impl Write for Cursor<Box<[u8]>> {
388388
#[cfg(test)]
389389
mod tests {
390390
use crate::io::prelude::*;
391-
use crate::io::{Cursor, SeekFrom, IoVec, IoVecMut};
391+
use crate::io::{Cursor, SeekFrom, IoSlice, IoSliceMut};
392392

393393
#[test]
394394
fn test_vec_writer() {
@@ -397,7 +397,7 @@ mod tests {
397397
assert_eq!(writer.write(&[1, 2, 3]).unwrap(), 3);
398398
assert_eq!(writer.write(&[4, 5, 6, 7]).unwrap(), 4);
399399
assert_eq!(writer.write_vectored(
400-
&[IoVec::new(&[]), IoVec::new(&[8, 9]), IoVec::new(&[10])],
400+
&[IoSlice::new(&[]), IoSlice::new(&[8, 9]), IoSlice::new(&[10])],
401401
).unwrap(), 3);
402402
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
403403
assert_eq!(writer, b);
@@ -410,7 +410,7 @@ mod tests {
410410
assert_eq!(writer.write(&[1, 2, 3]).unwrap(), 3);
411411
assert_eq!(writer.write(&[4, 5, 6, 7]).unwrap(), 4);
412412
assert_eq!(writer.write_vectored(
413-
&[IoVec::new(&[]), IoVec::new(&[8, 9]), IoVec::new(&[10])],
413+
&[IoSlice::new(&[]), IoSlice::new(&[8, 9]), IoSlice::new(&[10])],
414414
).unwrap(), 3);
415415
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
416416
assert_eq!(&writer.get_ref()[..], b);
@@ -424,7 +424,7 @@ mod tests {
424424
assert_eq!(writer.write(&[1, 2, 3]).unwrap(), 3);
425425
assert_eq!(writer.write(&[4, 5, 6, 7]).unwrap(), 4);
426426
assert_eq!(writer.write_vectored(
427-
&[IoVec::new(&[]), IoVec::new(&[8, 9]), IoVec::new(&[10])],
427+
&[IoSlice::new(&[]), IoSlice::new(&[8, 9]), IoSlice::new(&[10])],
428428
).unwrap(), 3);
429429
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
430430
assert_eq!(&writer.get_ref()[..], b);
@@ -452,18 +452,21 @@ mod tests {
452452
fn test_box_slice_writer_vectored() {
453453
let mut writer = Cursor::new(vec![0u8; 9].into_boxed_slice());
454454
assert_eq!(writer.position(), 0);
455-
assert_eq!(writer.write_vectored(&[IoVec::new(&[0])]).unwrap(), 1);
455+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[0])]).unwrap(), 1);
456456
assert_eq!(writer.position(), 1);
457457
assert_eq!(
458-
writer.write_vectored(&[IoVec::new(&[1, 2, 3]), IoVec::new(&[4, 5, 6, 7])]).unwrap(),
458+
writer.write_vectored(&[
459+
IoSlice::new(&[1, 2, 3]),
460+
IoSlice::new(&[4, 5, 6, 7]),
461+
]).unwrap(),
459462
7,
460463
);
461464
assert_eq!(writer.position(), 8);
462465
assert_eq!(writer.write_vectored(&[]).unwrap(), 0);
463466
assert_eq!(writer.position(), 8);
464467

465-
assert_eq!(writer.write_vectored(&[IoVec::new(&[8, 9])]).unwrap(), 1);
466-
assert_eq!(writer.write_vectored(&[IoVec::new(&[10])]).unwrap(), 0);
468+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[8, 9])]).unwrap(), 1);
469+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[10])]).unwrap(), 0);
467470
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8];
468471
assert_eq!(&**writer.get_ref(), b);
469472
}
@@ -495,20 +498,20 @@ mod tests {
495498
{
496499
let mut writer = Cursor::new(&mut buf[..]);
497500
assert_eq!(writer.position(), 0);
498-
assert_eq!(writer.write_vectored(&[IoVec::new(&[0])]).unwrap(), 1);
501+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[0])]).unwrap(), 1);
499502
assert_eq!(writer.position(), 1);
500503
assert_eq!(
501504
writer.write_vectored(
502-
&[IoVec::new(&[1, 2, 3]), IoVec::new(&[4, 5, 6, 7])],
505+
&[IoSlice::new(&[1, 2, 3]), IoSlice::new(&[4, 5, 6, 7])],
503506
).unwrap(),
504507
7,
505508
);
506509
assert_eq!(writer.position(), 8);
507510
assert_eq!(writer.write_vectored(&[]).unwrap(), 0);
508511
assert_eq!(writer.position(), 8);
509512

510-
assert_eq!(writer.write_vectored(&[IoVec::new(&[8, 9])]).unwrap(), 1);
511-
assert_eq!(writer.write_vectored(&[IoVec::new(&[10])]).unwrap(), 0);
513+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[8, 9])]).unwrap(), 1);
514+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[10])]).unwrap(), 0);
512515
}
513516
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8];
514517
assert_eq!(buf, b);
@@ -578,11 +581,14 @@ mod tests {
578581
fn test_mem_reader_vectored() {
579582
let mut reader = Cursor::new(vec![0, 1, 2, 3, 4, 5, 6, 7]);
580583
let mut buf = [];
581-
assert_eq!(reader.read_vectored(&mut [IoVecMut::new(&mut buf)]).unwrap(), 0);
584+
assert_eq!(reader.read_vectored(&mut [IoSliceMut::new(&mut buf)]).unwrap(), 0);
582585
assert_eq!(reader.position(), 0);
583586
let mut buf = [0];
584587
assert_eq!(
585-
reader.read_vectored(&mut [IoVecMut::new(&mut []), IoVecMut::new(&mut buf)]).unwrap(),
588+
reader.read_vectored(&mut [
589+
IoSliceMut::new(&mut []),
590+
IoSliceMut::new(&mut buf),
591+
]).unwrap(),
586592
1,
587593
);
588594
assert_eq!(reader.position(), 1);
@@ -591,9 +597,10 @@ mod tests {
591597
let mut buf1 = [0; 4];
592598
let mut buf2 = [0; 4];
593599
assert_eq!(
594-
reader.read_vectored(
595-
&mut [IoVecMut::new(&mut buf1), IoVecMut::new(&mut buf2)],
596-
).unwrap(),
600+
reader.read_vectored(&mut [
601+
IoSliceMut::new(&mut buf1),
602+
IoSliceMut::new(&mut buf2),
603+
]).unwrap(),
597604
7,
598605
);
599606
let b1: &[_] = &[1, 2, 3, 4];
@@ -629,11 +636,14 @@ mod tests {
629636
fn test_boxed_slice_reader_vectored() {
630637
let mut reader = Cursor::new(vec![0, 1, 2, 3, 4, 5, 6, 7].into_boxed_slice());
631638
let mut buf = [];
632-
assert_eq!(reader.read_vectored(&mut [IoVecMut::new(&mut buf)]).unwrap(), 0);
639+
assert_eq!(reader.read_vectored(&mut [IoSliceMut::new(&mut buf)]).unwrap(), 0);
633640
assert_eq!(reader.position(), 0);
634641
let mut buf = [0];
635642
assert_eq!(
636-
reader.read_vectored(&mut [IoVecMut::new(&mut []), IoVecMut::new(&mut buf)]).unwrap(),
643+
reader.read_vectored(&mut [
644+
IoSliceMut::new(&mut []),
645+
IoSliceMut::new(&mut buf),
646+
]).unwrap(),
637647
1,
638648
);
639649
assert_eq!(reader.position(), 1);
@@ -643,7 +653,7 @@ mod tests {
643653
let mut buf2 = [0; 4];
644654
assert_eq!(
645655
reader.read_vectored(
646-
&mut [IoVecMut::new(&mut buf1), IoVecMut::new(&mut buf2)],
656+
&mut [IoSliceMut::new(&mut buf1), IoSliceMut::new(&mut buf2)],
647657
).unwrap(),
648658
7,
649659
);
@@ -689,10 +699,13 @@ mod tests {
689699
let in_buf = vec![0, 1, 2, 3, 4, 5, 6, 7];
690700
let reader = &mut &in_buf[..];
691701
let mut buf = [];
692-
assert_eq!(reader.read_vectored(&mut [IoVecMut::new(&mut buf)]).unwrap(), 0);
702+
assert_eq!(reader.read_vectored(&mut [IoSliceMut::new(&mut buf)]).unwrap(), 0);
693703
let mut buf = [0];
694704
assert_eq!(
695-
reader.read_vectored(&mut [IoVecMut::new(&mut []), IoVecMut::new(&mut buf)]).unwrap(),
705+
reader.read_vectored(&mut [
706+
IoSliceMut::new(&mut []),
707+
IoSliceMut::new(&mut buf),
708+
]).unwrap(),
696709
1,
697710
);
698711
assert_eq!(reader.len(), 7);
@@ -702,7 +715,7 @@ mod tests {
702715
let mut buf2 = [0; 4];
703716
assert_eq!(
704717
reader.read_vectored(
705-
&mut [IoVecMut::new(&mut buf1), IoVecMut::new(&mut buf2)],
718+
&mut [IoSliceMut::new(&mut buf1), IoSliceMut::new(&mut buf2)],
706719
).unwrap(),
707720
7,
708721
);

src/libstd/io/impls.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::cmp;
2-
use crate::io::{self, SeekFrom, Read, Initializer, Write, Seek, BufRead, Error, ErrorKind, IoVecMut,
3-
IoVec};
2+
use crate::io::{self, SeekFrom, Read, Initializer, Write, Seek, BufRead, Error, ErrorKind,
3+
IoSliceMut, IoSlice};
44
use crate::fmt;
55
use crate::mem;
66

@@ -15,7 +15,7 @@ impl<R: Read + ?Sized> Read for &mut R {
1515
}
1616

1717
#[inline]
18-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
18+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
1919
(**self).read_vectored(bufs)
2020
}
2121

@@ -45,7 +45,7 @@ impl<W: Write + ?Sized> Write for &mut W {
4545
fn write(&mut self, buf: &[u8]) -> io::Result<usize> { (**self).write(buf) }
4646

4747
#[inline]
48-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
48+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
4949
(**self).write_vectored(bufs)
5050
}
5151

@@ -94,7 +94,7 @@ impl<R: Read + ?Sized> Read for Box<R> {
9494
}
9595

9696
#[inline]
97-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
97+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
9898
(**self).read_vectored(bufs)
9999
}
100100

@@ -124,7 +124,7 @@ impl<W: Write + ?Sized> Write for Box<W> {
124124
fn write(&mut self, buf: &[u8]) -> io::Result<usize> { (**self).write(buf) }
125125

126126
#[inline]
127-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
127+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
128128
(**self).write_vectored(bufs)
129129
}
130130

@@ -207,7 +207,7 @@ impl Read for &[u8] {
207207
}
208208

209209
#[inline]
210-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
210+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
211211
let mut nread = 0;
212212
for buf in bufs {
213213
nread += self.read(buf)?;
@@ -280,7 +280,7 @@ impl Write for &mut [u8] {
280280
}
281281

282282
#[inline]
283-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
283+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
284284
let mut nwritten = 0;
285285
for buf in bufs {
286286
nwritten += self.write(buf)?;
@@ -316,7 +316,7 @@ impl Write for Vec<u8> {
316316
}
317317

318318
#[inline]
319-
fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> {
319+
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
320320
let len = bufs.iter().map(|b| b.len()).sum();
321321
self.reserve(len);
322322
for buf in bufs {

0 commit comments

Comments
 (0)