Struct RcArray

Source
pub struct RcArray<T> { /* private fields */ }
Expand description

A reference-counted pointer to an array.

It allow access to the elements of the array with one indirection, allow the array to grow until the specified capacity and has a function RcArray::make_mut.

It is different from Rc<Vec> and Rc<[T]>. In Rc<Vec> it is necessary to follow two indirection to access an element. In Rc<[T]> the array cannot grow and the function Rc::make_mut is not applicable.

TODO: write about mem::size_of.

§Examples

use fera_array::{Array, RcArray};

let a = RcArray::with_value(0, 5);
// a and b share the inner data, this is a O(1) operation
let mut b = a.clone();

// the inner data in cloned (copy on write)
b[1] = 1;
assert_eq!(0, a[1]);
assert_eq!(1, b[1]);

// the inner data is not shared, so it can be modified without being cloned
b[2] = 2;

Implementations§

Source§

impl<T> RcArray<T>

Source

pub fn as_slice(&self) -> &[T]

Returns a slice containing the entire array.

Source

pub fn as_mut_slice(&mut self) -> &mut [T]

Returns a mutable slice containing the entire array.

Source§

impl<T: Clone> RcArray<T>

Source

pub fn make_mut(&mut self) -> &mut [T]

Makes the array mutable. The inner data is cloned if there is more than one reference to it, otherwise the array is already mutable.

Trait Implementations§

Source§

impl<T: Clone> Array<T> for RcArray<T>

Source§

fn with_value(value: T, n: usize) -> Self
where T: Clone,

Creates a new array with n repeated value.
Source§

fn len(&self) -> usize

Returns the number of elements in the array.
Source§

fn get(&self, index: usize) -> Option<&T>

Returns a reference to the element of the array at index, or None if the index is out of bounds.
Source§

fn get_mut(&mut self, index: usize) -> Option<&mut T>

Returns a mutable reference to the element of the array at index, or None if the index is out of bounds.
Source§

unsafe fn get_unchecked(&self, index: usize) -> &T

Returns a reference to the element of the array at index, without doing bounds checking.
Source§

unsafe fn get_unchecked_mut(&mut self, index: usize) -> &mut T

Returns a mutable reference to the element of the array at index, without doing bounds checking.
Source§

fn contains(&self, value: &T) -> bool
where T: PartialEq,

Returns true if the array contains value, false otherwise.
Source§

fn is_empty(&self) -> bool

Returns true if the length of the array is 0, otherwise false.
Source§

fn iter(&self) -> Iter<'_, T, Self>
where Self: Sized,

Returns a iterator over the array.
Source§

impl<T> Clone for RcArray<T>

Source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> Drop for RcArray<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<T: Clone> DynamicArray<T> for RcArray<T>

Source§

fn with_capacity(cap: usize) -> Self

Creates a array with the specified capacity. Read more
Source§

unsafe fn set_len(&mut self, len: usize)

Change the length of the array.
Source§

fn capacity(&self) -> usize

Returns the capacity of the array.
Source§

fn reserve(&mut self, additional: usize)

Reserve capacity for at least additional more elements. Read more
Source§

unsafe fn push_unchecked(&mut self, value: T)

Write value to the end of the array and increment the length. Read more
Source§

fn push(&mut self, value: T)

Appends the value to the array. Read more
Source§

fn extend<I>(&mut self, iter: I)
where Self: Sized, I: IntoIterator<Item = T>,

Appends all elements of iter to the array. Read more
Source§

fn extend_from_slice(&mut self, other: &[T])
where T: Clone,

Appends all elements in a slice to the array. Read more
Source§

fn extend_with_element(&mut self, value: T, n: usize)
where T: Clone,

Extend the array by n additional clones of value. Read more
Source§

impl<T> FromIterator<T> for RcArray<T>

Source§

fn from_iter<I>(iter: I) -> Self
where I: IntoIterator<Item = T>,

Creates a value from an iterator. Read more
Source§

impl<T> Index<usize> for RcArray<T>

Source§

type Output = T

The returned type after indexing.
Source§

fn index(&self, index: usize) -> &T

Performs the indexing (container[index]) operation. Read more
Source§

impl<T: Clone> IndexMut<usize> for RcArray<T>

Source§

fn index_mut(&mut self, index: usize) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more

Auto Trait Implementations§

§

impl<T> Freeze for RcArray<T>

§

impl<T> !RefUnwindSafe for RcArray<T>

§

impl<T> !Send for RcArray<T>

§

impl<T> !Sync for RcArray<T>

§

impl<T> Unpin for RcArray<T>

§

impl<T> !UnwindSafe for RcArray<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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.