Skip to content

Commit bd177f3

Browse files
committed
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
1 parent d4a32d5 commit bd177f3

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

+278
-278
lines changed

src/libstd/fs.rs

+5-5
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

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ 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, IoSliceMut};
99
use crate::memchr;
1010

1111
/// The `BufReader` struct adds buffering to any reader.
@@ -249,7 +249,7 @@ impl<R: Read> Read for BufReader<R> {
249249
Ok(nread)
250250
}
251251

252-
fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> {
252+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
253253
let total_len = bufs.iter().map(|b| b.len()).sum::<usize>();
254254
if self.pos == self.cap && total_len >= self.buf.len() {
255255
self.discard_buffer();
@@ -609,7 +609,7 @@ impl<W: Write> Write for BufWriter<W> {
609609
}
610610
}
611611

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

src/libstd/io/cursor.rs

+29-29
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,18 @@ 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(&[IoSlice::new(&[1, 2, 3]), IoSlice::new(&[4, 5, 6, 7])]).unwrap(),
459459
7,
460460
);
461461
assert_eq!(writer.position(), 8);
462462
assert_eq!(writer.write_vectored(&[]).unwrap(), 0);
463463
assert_eq!(writer.position(), 8);
464464

465-
assert_eq!(writer.write_vectored(&[IoVec::new(&[8, 9])]).unwrap(), 1);
466-
assert_eq!(writer.write_vectored(&[IoVec::new(&[10])]).unwrap(), 0);
465+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[8, 9])]).unwrap(), 1);
466+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[10])]).unwrap(), 0);
467467
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8];
468468
assert_eq!(&**writer.get_ref(), b);
469469
}
@@ -495,20 +495,20 @@ mod tests {
495495
{
496496
let mut writer = Cursor::new(&mut buf[..]);
497497
assert_eq!(writer.position(), 0);
498-
assert_eq!(writer.write_vectored(&[IoVec::new(&[0])]).unwrap(), 1);
498+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[0])]).unwrap(), 1);
499499
assert_eq!(writer.position(), 1);
500500
assert_eq!(
501501
writer.write_vectored(
502-
&[IoVec::new(&[1, 2, 3]), IoVec::new(&[4, 5, 6, 7])],
502+
&[IoSlice::new(&[1, 2, 3]), IoSlice::new(&[4, 5, 6, 7])],
503503
).unwrap(),
504504
7,
505505
);
506506
assert_eq!(writer.position(), 8);
507507
assert_eq!(writer.write_vectored(&[]).unwrap(), 0);
508508
assert_eq!(writer.position(), 8);
509509

510-
assert_eq!(writer.write_vectored(&[IoVec::new(&[8, 9])]).unwrap(), 1);
511-
assert_eq!(writer.write_vectored(&[IoVec::new(&[10])]).unwrap(), 0);
510+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[8, 9])]).unwrap(), 1);
511+
assert_eq!(writer.write_vectored(&[IoSlice::new(&[10])]).unwrap(), 0);
512512
}
513513
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8];
514514
assert_eq!(buf, b);
@@ -578,11 +578,11 @@ mod tests {
578578
fn test_mem_reader_vectored() {
579579
let mut reader = Cursor::new(vec![0, 1, 2, 3, 4, 5, 6, 7]);
580580
let mut buf = [];
581-
assert_eq!(reader.read_vectored(&mut [IoVecMut::new(&mut buf)]).unwrap(), 0);
581+
assert_eq!(reader.read_vectored(&mut [IoSliceMut::new(&mut buf)]).unwrap(), 0);
582582
assert_eq!(reader.position(), 0);
583583
let mut buf = [0];
584584
assert_eq!(
585-
reader.read_vectored(&mut [IoVecMut::new(&mut []), IoVecMut::new(&mut buf)]).unwrap(),
585+
reader.read_vectored(&mut [IoSliceMut::new(&mut []), IoSliceMut::new(&mut buf)]).unwrap(),
586586
1,
587587
);
588588
assert_eq!(reader.position(), 1);
@@ -592,7 +592,7 @@ mod tests {
592592
let mut buf2 = [0; 4];
593593
assert_eq!(
594594
reader.read_vectored(
595-
&mut [IoVecMut::new(&mut buf1), IoVecMut::new(&mut buf2)],
595+
&mut [IoSliceMut::new(&mut buf1), IoSliceMut::new(&mut buf2)],
596596
).unwrap(),
597597
7,
598598
);
@@ -629,11 +629,11 @@ mod tests {
629629
fn test_boxed_slice_reader_vectored() {
630630
let mut reader = Cursor::new(vec![0, 1, 2, 3, 4, 5, 6, 7].into_boxed_slice());
631631
let mut buf = [];
632-
assert_eq!(reader.read_vectored(&mut [IoVecMut::new(&mut buf)]).unwrap(), 0);
632+
assert_eq!(reader.read_vectored(&mut [IoSliceMut::new(&mut buf)]).unwrap(), 0);
633633
assert_eq!(reader.position(), 0);
634634
let mut buf = [0];
635635
assert_eq!(
636-
reader.read_vectored(&mut [IoVecMut::new(&mut []), IoVecMut::new(&mut buf)]).unwrap(),
636+
reader.read_vectored(&mut [IoSliceMut::new(&mut []), IoSliceMut::new(&mut buf)]).unwrap(),
637637
1,
638638
);
639639
assert_eq!(reader.position(), 1);
@@ -643,7 +643,7 @@ mod tests {
643643
let mut buf2 = [0; 4];
644644
assert_eq!(
645645
reader.read_vectored(
646-
&mut [IoVecMut::new(&mut buf1), IoVecMut::new(&mut buf2)],
646+
&mut [IoSliceMut::new(&mut buf1), IoSliceMut::new(&mut buf2)],
647647
).unwrap(),
648648
7,
649649
);
@@ -689,10 +689,10 @@ mod tests {
689689
let in_buf = vec![0, 1, 2, 3, 4, 5, 6, 7];
690690
let reader = &mut &in_buf[..];
691691
let mut buf = [];
692-
assert_eq!(reader.read_vectored(&mut [IoVecMut::new(&mut buf)]).unwrap(), 0);
692+
assert_eq!(reader.read_vectored(&mut [IoSliceMut::new(&mut buf)]).unwrap(), 0);
693693
let mut buf = [0];
694694
assert_eq!(
695-
reader.read_vectored(&mut [IoVecMut::new(&mut []), IoVecMut::new(&mut buf)]).unwrap(),
695+
reader.read_vectored(&mut [IoSliceMut::new(&mut []), IoSliceMut::new(&mut buf)]).unwrap(),
696696
1,
697697
);
698698
assert_eq!(reader.len(), 7);
@@ -702,7 +702,7 @@ mod tests {
702702
let mut buf2 = [0; 4];
703703
assert_eq!(
704704
reader.read_vectored(
705-
&mut [IoVecMut::new(&mut buf1), IoVecMut::new(&mut buf2)],
705+
&mut [IoSliceMut::new(&mut buf1), IoSliceMut::new(&mut buf2)],
706706
).unwrap(),
707707
7,
708708
);

src/libstd/io/impls.rs

+9-9
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, IoSliceMut,
3+
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)