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

Think of it as paralell Vector. Its contents can be accessed by FragRef and FragSlice. It can produce valid FragRefs that are initially mutable and thread local, and later can be promoted to shared and immutable. The access complexity is O(1) but involves double indirection. This structure does bound checks of each access.

Structure is designed to be sent between main and worker thread, worker thread can push new items and main thread commits them to the FragBase and pulls updates from it.

Implementations§

source§

impl<T> FragMap<T>

source

pub fn push(&mut self, value: T) -> FragRef<T>

Returned FragRef is initially mutable and thread local, after calling commit it will be promoted to shared and immutable.

source

pub fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) -> FragSlice<T>where I::IntoIter: ExactSizeIterator,

Analogous to push but handles sequences.

source

pub fn commit(&mut self, base: &mut FragBase<T>)

Freezes the thread local data and makes it shared.

source

pub fn commit_unique(self, base: &mut FragBase<T>)

Freezes the thread local data and makes it shared. Consuming version avoids cloning.

source

pub fn pull(&mut self, base: &FragBase<T>)

Pulls updates from possibli commited by other FragMaps.

source

pub fn indexed( &self, slice: FragSlice<T> ) -> impl Iterator<Item = (FragRef<T>, &T)> + ExactSizeIterator + DoubleEndedIteratorwhere T: NoInteriorMutability,

Returns iterator over slice items along with their FragRef.

source

pub fn next(&self) -> FragRef<T>

Returns next FragRef that will be returned by push.

source

pub unsafe fn get_unchecked(&self, index: FragRef<T>) -> &T

Safety

The caller must ensure reference is in range of valid memory.

source

pub unsafe fn gen_unchecked_slice(&self, slice: FragSlice<T>) -> &[T]

Safety

Ensure slice is in range of valid memory.

source

pub unsafe fn get_unchacked_mut(&mut self, index: FragRef<T>) -> &mut T

Safety

Ensure slice is not out of bounds and does not capture frozen element.

source

pub unsafe fn gen_unchecked_slice_mut( &mut self, slice: FragSlice<T> ) -> &mut [T]

Safety

Ensure slice is not out of bounds and does not capture frozen elements.

Trait Implementations§

source§

impl<T: NoInteriorMutability> Index<FragRef<T>> for FragMap<T>

§

type Output = T

The returned type after indexing.
source§

fn index(&self, index: FragRef<T>) -> &Self::Output

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

impl<T: NoInteriorMutability> Index<FragSlice<T>> for FragMap<T>

§

type Output = [T]

The returned type after indexing.
source§

fn index(&self, index: FragSlice<T>) -> &Self::Output

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

impl<T: NoInteriorMutability> IndexMut<FragRef<T>> for FragMap<T>

source§

fn index_mut(&mut self, index: FragRef<T>) -> &mut Self::Output

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

impl<T: NoInteriorMutability> IndexMut<FragSlice<T>> for FragMap<T>

source§

fn index_mut(&mut self, index: FragSlice<T>) -> &mut Self::Output

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

Auto Trait Implementations§

§

impl<T> !ArchiveCopy for FragMap<T>

§

impl<T> !NoInteriorMutability for FragMap<T>

§

impl<T> RefUnwindSafe for FragMap<T>where T: RefUnwindSafe,

§

impl<T> Send for FragMap<T>where T: Send + Sync,

§

impl<T> Sync for FragMap<T>where T: Send + Sync,

§

impl<T> Unpin for FragMap<T>

§

impl<T> UnwindSafe for FragMap<T>where T: RefUnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<F, W, T, D> Deserialize<With<T, W>, D> for Fwhere W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

source§

fn deserialize( &self, deserializer: &mut D ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · 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.

§

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.