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.