BorrowedCursor in alloc::io - Rust
Description: A writeable view of the unfilled portion of a `BorrowedBuf`.

Skip to main content

## BorrowedCursor

# Struct BorrowedCursor

Source

    pub struct BorrowedCursor<'a, T> { /* private fields */ }

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)
Expand description

A writeable view of the unfilled portion of a `BorrowedBuf`.

The unfilled portion may be uninitialized; see `BorrowedBuf` for details.

Data can be written directly to the cursor by using `append` or indirectly by getting a slice of part or all of the cursor and writing into the slice. In the indirect case, the caller must call `advance` after writing to inform the cursor how many elements have been written.

Once elements are written to the cursor, they become part of the filled portion of the underlying `BorrowedBuf` and can no longer be accessed or re-written by the cursor. In other words, the cursor tracks the unfilled part of the underlying `BorrowedBuf`.

The lifetime `'a` is a bound on the lifetime of the underlying buffer (which means it is a bound on the elements in that buffer by transitivity).

## Implementations§

Source§

### impl<'a, T> BorrowedCursor<'a, T>
where T: Copy,

Source

#### pub fn reborrow<'this>(&'this mut self) -> BorrowedCursor<'this, T>

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Reborrows this cursor by cloning it with a smaller lifetime.

Since a cursor maintains unique access to its underlying buffer, the borrowed cursor is not accessible while the new cursor exists.

Source

#### pub fn capacity(&self) -> usize

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns the available space in the cursor.

Source

#### pub fn written(&self) -> usize

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns the number of elements written to the `BorrowedBuf` this cursor was created from.

In particular, the count returned is shared by all reborrows of the cursor.

Source

#### pub fn is_init(&self) -> bool

🔬This is a nightly-only experimental API. (`borrowed_buf_init` #78485)

Returns `true` if the buffer is initialized.

Source

#### pub unsafe fn set_init(&mut self)

🔬This is a nightly-only experimental API. (`borrowed_buf_init` #78485)

Set the buffer as fully initialized.

##### §Safety

All the elements of the cursor must be initialized.

Source

#### pub unsafe fn as_mut(&mut self) -> &mut [MaybeUninit<T>]

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Returns a mutable reference to the whole cursor.

##### §Safety

The caller must not uninitialize any elements of the cursor if it is initialized.

Source

#### pub fn advance_checked(&mut self, n: usize) -> &mut BorrowedCursor<'a, T>

🔬This is a nightly-only experimental API. (`borrowed_buf_init` #78485)

Advances the cursor by asserting that `n` elements have been filled.

After advancing, the `n` elements are no longer accessible via the cursor and can only be accessed via the underlying buffer. I.e., the buffer’s filled portion grows by `n` elements and its unfilled portion (and the capacity of this cursor) shrinks by `n` elements.

If less than `n` elements initialized (by the cursor’s point of view), `set_init` should be called first.

##### §Panics

Panics if there are less than `n` elements initialized.

Source

#### pub unsafe fn advance(&mut self, n: usize) -> &mut BorrowedCursor<'a, T>

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Advances the cursor by asserting that `n` elements have been filled.

After advancing, the `n` elements are no longer accessible via the cursor and can only be accessed via the underlying buffer. I.e., the buffer’s filled portion grows by `n` elements and its unfilled portion (and the capacity of this cursor) shrinks by `n` elements.

##### §Safety

The caller must ensure that the first `n` elements of the cursor have been initialized.

Source

#### pub fn append(&mut self, buf: &[T])

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Append elements to the cursor, advancing position within its buffer.

##### §Panics

Panics if `self.capacity()` is less than `buf.len()`.

Source

#### pub fn with_unfilled_buf<R>( &mut self, f: impl FnOnce(&mut BorrowedBuf<'_, T>) -> R, ) -> R

🔬This is a nightly-only experimental API. (`core_io_borrowed_buf` #117693)

Runs the given closure with a `BorrowedBuf` containing the unfilled part of the cursor.

This enables inspecting what was written to the cursor.

##### §Panics

Panics if the `BorrowedBuf` given to the closure is replaced by another one.

Source§

### impl<'a> BorrowedCursor<'a, u8>

Source

#### pub fn ensure_init(&mut self) -> &mut [u8]

🔬This is a nightly-only experimental API. (`borrowed_buf_init` #78485)

Initializes all bytes in the cursor and returns them.

## Trait Implementations§

Source§

### impl<T> Debug for BorrowedCursor<'_, T>

Source§

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

### impl<'data, T> From<BorrowedCursor<'data, T>> for BorrowedBuf<'data, T>
where T: Copy,

Creates a new `BorrowedBuf` from a cursor.

Use `BorrowedCursor::with_unfilled_buf` instead for a safer alternative.

Source§

#### fn from(buf: BorrowedCursor<'data, T>) -> BorrowedBuf<'data, T>

Converts to this type from the input type.

## Auto Trait Implementations§

§

### impl<'a, T> !UnwindSafe for BorrowedCursor<'a, T>

§

### impl<'a, T> Freeze for BorrowedCursor<'a, T>

§

### impl<'a, T> RefUnwindSafe for BorrowedCursor<'a, T>
where T: RefUnwindSafe,

§

### impl<'a, T> Send for BorrowedCursor<'a, T>
where T: Send,

§

### impl<'a, T> Sync for BorrowedCursor<'a, T>
where T: Sync,

§

### impl<'a, T> Unpin for BorrowedCursor<'a, T>

§

### impl<'a, T> UnsafeUnpin for BorrowedCursor<'a, T>

## Blanket Implementations§

Source§

### impl<T> Any for T
where T: 'static + ?Sized,

Source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
Source§

### impl<T> Borrow<T> for T
where T: ?Sized,

Source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

### impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

### impl<T> From<T> for T

Source§

#### fn from(t: T) -> T

Returns the argument unchanged.

Source§

### impl<T, U> Into<U> for T
where U: From<T>,

Source§

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

Source§

### impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

#### type Error = Infallible

The type returned in the event of a conversion error.
Source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

### impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.