pub struct BulkDataWriter<Data: Default + 'static> { /* private fields */ }Expand description
A struct used for asynchronously mutating RwDatas without a
Pass
This works by wrapping the RwData and collecting every mutating
function inside a separate Mutex. Whenever you access the
Data, the changes are applied to it.
With this in mind, one limitation of this type is that every
access must make use of a &mut Pass, with the exception of
BulkDataWriter::try_read, which returns Some only when there
have been no changes to the Data.
Implementations§
Source§impl<Data: Default + 'static> BulkDataWriter<Data>
impl<Data: Default + 'static> BulkDataWriter<Data>
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Returns a new BulkDataWriter
Considering the fact that this struct is almost exclusively
used in static variables, I have decided to make its
constructor const, to facilitate its usage.
Sourcepub fn mutate(&self, f: impl FnOnce(&mut Data) + Send + 'static)
pub fn mutate(&self, f: impl FnOnce(&mut Data) + Send + 'static)
Adds a mutating function to the list of functions to call upon
accessing the Data
This is useful for allowing mutation from any thread, and
without needing Passes. duat-core makes extensive use of
this function in order to provide pleasant to use APIs.
Sourcepub fn write<'p>(&'p self, pa: &'p mut Pass) -> &'p mut Data
pub fn write<'p>(&'p self, pa: &'p mut Pass) -> &'p mut Data
Accesses the Data, calling all added actions
This function will call all actions that were sent by the
BulkDataWriter::mutate function in order to write to the
Data asynchronously.
Sourcepub fn try_read<'p>(&'p self, pa: &'p Pass) -> Option<&'p Data>
pub fn try_read<'p>(&'p self, pa: &'p Pass) -> Option<&'p Data>
Attempts to read the Data
This function will return None if there are pending
actions that need to happen before reading/writing. You should
almost always prefer calling BulkDataWriter::write
instead.
Sourcepub fn map_mut<Ret: 'static>(
&self,
map: impl FnMut(&mut Data) -> Ret + 'static,
) -> MutDataMap<Data, Ret>
pub fn map_mut<Ret: 'static>( &self, map: impl FnMut(&mut Data) -> Ret + 'static, ) -> MutDataMap<Data, Ret>
Maps the value to another value with a mutating function
This will apply the delayed updting of
BulkDataWriter::write every time the mapping is called, so
the value always stays up to date.
Trait Implementations§
Auto Trait Implementations§
impl<Data> !Freeze for BulkDataWriter<Data>
impl<Data> !RefUnwindSafe for BulkDataWriter<Data>
impl<Data> Send for BulkDataWriter<Data>
impl<Data> Sync for BulkDataWriter<Data>
impl<Data> Unpin for BulkDataWriter<Data>
impl<Data> !UnwindSafe for BulkDataWriter<Data>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.