]> git.lizzy.rs Git - rust.git/commitdiff
Add IoSlice(Mut)::advance
authorThomas de Zeeuw <thomasdezeeuw@gmail.com>
Sat, 29 May 2021 08:18:19 +0000 (10:18 +0200)
committerThomas de Zeeuw <thomasdezeeuw@gmail.com>
Sat, 29 May 2021 08:18:19 +0000 (10:18 +0200)
Advance the internal cursor of a single slice.

library/std/src/io/mod.rs

index 39b5ba41843c6ec6bb4199e31c2a5eed3db796ae..4746db5a9fdefa2f4a517cba42abf85cde9ade13 100644 (file)
@@ -1045,6 +1045,32 @@ pub fn new(buf: &'a mut [u8]) -> IoSliceMut<'a> {
 
     /// Advance the internal cursor of the slice.
     ///
+    /// Also see [`IoSliceMut::advance_slice`] to advance the cursors of
+    /// multiple buffers.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// #![feature(io_slice_advance)]
+    ///
+    /// use std::io::IoSliceMut;
+    /// use std::ops::Deref;
+    ///
+    /// let mut data = [1; 8];
+    /// let mut buf = IoSliceMut::new(&mut data);
+    ///
+    /// // Mark 10 bytes as read.
+    /// buf.advance(3);
+    /// assert_eq!(buf.deref(), [1; 5].as_ref());
+    /// ```
+    #[unstable(feature = "io_slice_advance", issue = "62726")]
+    #[inline]
+    pub fn advance(&mut self, n: usize) {
+        self.0.advance(n)
+    }
+
+    /// Advance the internal cursor of the slices.
+    ///
     /// # Notes
     ///
     /// Elements in the slice may be modified if the cursor is not advanced to
@@ -1093,7 +1119,7 @@ pub fn advance_slice(bufs: &mut &mut [IoSliceMut<'a>], n: usize) {
 
         *bufs = &mut replace(bufs, &mut [])[remove..];
         if !bufs.is_empty() {
-            bufs[0].0.advance(n - accumulated_len)
+            bufs[0].advance(n - accumulated_len)
         }
     }
 }
@@ -1153,6 +1179,32 @@ pub fn new(buf: &'a [u8]) -> IoSlice<'a> {
 
     /// Advance the internal cursor of the slice.
     ///
+    /// Also see [`IoSlice::advance_slice`] to advance the cursors of multiple
+    /// buffers.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// #![feature(io_slice_advance)]
+    ///
+    /// use std::io::IoSlice;
+    /// use std::ops::Deref;
+    ///
+    /// let mut data = [1; 8];
+    /// let mut buf = IoSlice::new(&mut data);
+    ///
+    /// // Mark 10 bytes as read.
+    /// buf.advance(3);
+    /// assert_eq!(buf.deref(), [1; 5].as_ref());
+    /// ```
+    #[unstable(feature = "io_slice_advance", issue = "62726")]
+    #[inline]
+    pub fn advance(&mut self, n: usize) {
+        self.0.advance(n)
+    }
+
+    /// Advance the internal cursor of the slices.
+    ///
     /// # Notes
     ///
     /// Elements in the slice may be modified if the cursor is not advanced to
@@ -1200,7 +1252,7 @@ pub fn advance_slice(bufs: &mut &mut [IoSlice<'a>], n: usize) {
 
         *bufs = &mut replace(bufs, &mut [])[remove..];
         if !bufs.is_empty() {
-            bufs[0].0.advance(n - accumulated_len)
+            bufs[0].advance(n - accumulated_len)
         }
     }
 }