Replace io::Cursor::{remaining_slice, is_empty}
with `io::Cursor::{… · model-checking/verify-rust-std@3ec244f (original) (raw)
`@@ -210,55 +210,60 @@ impl Cursor
`
210
210
`where
`
211
211
`T: AsRef<[u8]>,
`
212
212
`{
`
213
``
`-
/// Returns the remaining slice.
`
``
213
`+
/// Splits the underlying slice at the cursor position and returns them.
`
214
214
`///
`
215
215
`/// # Examples
`
216
216
`///
`
217
217
```` /// ```
`218`
``
`-
/// #![feature(cursor_remaining)]
`
``
`218`
`+
/// #![feature(cursor_split)]
`
`219`
`219`
`/// use std::io::Cursor;
`
`220`
`220`
`///
`
`221`
`221`
`/// let mut buff = Cursor::new(vec![1, 2, 3, 4, 5]);
`
`222`
`222`
`///
`
`223`
``
`-
/// assert_eq!(buff.remaining_slice(), &[1, 2, 3, 4, 5]);
`
``
`223`
`+
/// assert_eq!(buff.split(), ([].as_slice(), [1, 2, 3, 4, 5].as_slice()));
`
`224`
`224`
`///
`
`225`
`225`
`/// buff.set_position(2);
`
`226`
``
`-
/// assert_eq!(buff.remaining_slice(), &[3, 4, 5]);
`
`227`
``
`-
///
`
`228`
``
`-
/// buff.set_position(4);
`
`229`
``
`-
/// assert_eq!(buff.remaining_slice(), &[5]);
`
``
`226`
`+
/// assert_eq!(buff.split(), ([1, 2].as_slice(), [3, 4, 5].as_slice()));
`
`230`
`227`
`///
`
`231`
`228`
`/// buff.set_position(6);
`
`232`
``
`-
/// assert_eq!(buff.remaining_slice(), &[]);
`
``
`229`
`+
/// assert_eq!(buff.split(), ([1, 2, 3, 4, 5].as_slice(), [].as_slice()));
`
`233`
`230`
```` /// ```
234
``
`-
#[unstable(feature = "cursor_remaining", issue = "86369")]
`
235
``
`-
pub fn remaining_slice(&self) -> &[u8] {
`
236
``
`-
let len = self.pos.min(self.inner.as_ref().len() as u64);
`
237
``
`-
&self.inner.as_ref()[(len as usize)..]
`
``
231
`+
#[unstable(feature = "cursor_split", issue = "86369")]
`
``
232
`+
pub fn split(&self) -> (&[u8], &[u8]) {
`
``
233
`+
let slice = self.inner.as_ref();
`
``
234
`+
let pos = self.pos.min(slice.len() as u64);
`
``
235
`+
slice.split_at(pos as usize)
`
238
236
`}
`
``
237
`+
}
`
239
238
``
240
``
`` -
/// Returns true
if the remaining slice is empty.
``
``
239
`+
impl Cursor
`
``
240
`+
where
`
``
241
`+
T: AsMut<[u8]>,
`
``
242
`+
{
`
``
243
`+
/// Splits the underlying slice at the cursor position and returns them
`
``
244
`+
/// mutably.
`
241
245
`///
`
242
246
`/// # Examples
`
243
247
`///
`
244
248
```` /// ```
`245`
``
`-
/// #![feature(cursor_remaining)]
`
``
`249`
`+
/// #![feature(cursor_split)]
`
`246`
`250`
`/// use std::io::Cursor;
`
`247`
`251`
`///
`
`248`
`252`
`/// let mut buff = Cursor::new(vec![1, 2, 3, 4, 5]);
`
`249`
`253`
`///
`
`250`
``
`-
/// buff.set_position(2);
`
`251`
``
`-
/// assert!(!buff.is_empty());
`
``
`254`
`+
/// assert_eq!(buff.split_mut(), ([].as_mut_slice(), [1, 2, 3, 4, 5].as_mut_slice()));
`
`252`
`255`
`///
`
`253`
``
`-
/// buff.set_position(5);
`
`254`
``
`-
/// assert!(buff.is_empty());
`
``
`256`
`+
/// buff.set_position(2);
`
``
`257`
`+
/// assert_eq!(buff.split_mut(), ([1, 2].as_mut_slice(), [3, 4, 5].as_mut_slice()));
`
`255`
`258`
`///
`
`256`
``
`-
/// buff.set_position(10);
`
`257`
``
`-
/// assert!(buff.is_empty());
`
``
`259`
`+
/// buff.set_position(6);
`
``
`260`
`+
/// assert_eq!(buff.split_mut(), ([1, 2, 3, 4, 5].as_mut_slice(), [].as_mut_slice()));
`
`258`
`261`
```` /// ```
259
``
`-
#[unstable(feature = "cursor_remaining", issue = "86369")]
`
260
``
`-
pub fn is_empty(&self) -> bool {
`
261
``
`-
self.pos >= self.inner.as_ref().len() as u64
`
``
262
`+
#[unstable(feature = "cursor_split", issue = "86369")]
`
``
263
`+
pub fn split_mut(&mut self) -> (&mut [u8], &mut [u8]) {
`
``
264
`+
let slice = self.inner.as_mut();
`
``
265
`+
let pos = self.pos.min(slice.len() as u64);
`
``
266
`+
slice.split_at_mut(pos as usize)
`
262
267
`}
`
263
268
`}
`
264
269
``
`@@ -320,15 +325,15 @@ where
`
320
325
`T: AsRef<[u8]>,
`
321
326
`{
`
322
327
`fn read(&mut self, buf: &mut [u8]) -> io::Result {
`
323
``
`-
let n = Read::read(&mut self.remaining_slice(), buf)?;
`
``
328
`+
let n = Read::read(&mut Cursor::split(self).1, buf)?;
`
324
329
`self.pos += n as u64;
`
325
330
`Ok(n)
`
326
331
`}
`
327
332
``
328
333
`fn read_buf(&mut self, mut cursor: BorrowedCursor<'_>) -> io::Result<()> {
`
329
334
`let prev_written = cursor.written();
`
330
335
``
331
``
`-
Read::read_buf(&mut self.remaining_slice(), cursor.reborrow())?;
`
``
336
`+
Read::read_buf(&mut Cursor::split(self).1, cursor.reborrow())?;
`
332
337
``
333
338
`self.pos += (cursor.written() - prev_written) as u64;
`
334
339
``
`@@ -352,7 +357,7 @@ where
`
352
357
`}
`
353
358
``
354
359
`fn read_exact(&mut self, buf: &mut [u8]) -> io::Result<()> {
`
355
``
`-
let result = Read::read_exact(&mut self.remaining_slice(), buf);
`
``
360
`+
let result = Read::read_exact(&mut Cursor::split(self).1, buf);
`
356
361
``
357
362
`match result {
`
358
363
`Ok(_) => self.pos += buf.len() as u64,
`
`@@ -366,14 +371,14 @@ where
`
366
371
`fn read_buf_exact(&mut self, mut cursor: BorrowedCursor<'_>) -> io::Result<()> {
`
367
372
`let prev_written = cursor.written();
`
368
373
``
369
``
`-
let result = Read::read_buf_exact(&mut self.remaining_slice(), cursor.reborrow());
`
``
374
`+
let result = Read::read_buf_exact(&mut Cursor::split(self).1, cursor.reborrow());
`
370
375
`self.pos += (cursor.written() - prev_written) as u64;
`
371
376
``
372
377
` result
`
373
378
`}
`
374
379
``
375
380
`fn read_to_end(&mut self, buf: &mut Vec) -> io::Result {
`
376
``
`-
let content = self.remaining_slice();
`
``
381
`+
let content = Cursor::split(self).1;
`
377
382
`let len = content.len();
`
378
383
` buf.try_reserve(len)?;
`
379
384
` buf.extend_from_slice(content);
`
`@@ -384,7 +389,7 @@ where
`
384
389
``
385
390
`fn read_to_string(&mut self, buf: &mut String) -> io::Result {
`
386
391
`let content =
`
387
``
`-
crate::str::from_utf8(self.remaining_slice()).map_err(|_| io::Error::INVALID_UTF8)?;
`
``
392
`+
crate::str::from_utf8(Cursor::split(self).1).map_err(|_| io::Error::INVALID_UTF8)?;
`
388
393
`let len = content.len();
`
389
394
` buf.try_reserve(len)?;
`
390
395
` buf.push_str(content);
`
`@@ -400,7 +405,7 @@ where
`
400
405
`T: AsRef<[u8]>,
`
401
406
`{
`
402
407
`fn fill_buf(&mut self) -> io::Result<&[u8]> {
`
403
``
`-
Ok(self.remaining_slice())
`
``
408
`+
Ok(Cursor::split(self).1)
`
404
409
`}
`
405
410
`fn consume(&mut self, amt: usize) {
`
406
411
`self.pos += amt as u64;
`