pub struct ICoW<ITEM: Debug + Send> { /* private fields */ }Expand description
A main structure which implements CoW approach based on atomics. The object
stored inside can be read directly, but modifying the inner value is
performed using CoW copy-on-write approach.
The inner value must either Copy, Clone, Default, or provide new value manually. The copied value is modified and stored back either shared or exclusive method. The exclusive lock prevents other CoW operations guaranteeing the uniq write access.
#[derive(Debug, Clone)]
struct TestStruct { s: u32 }
let cow_val = ICoW::new(TestStruct{ s: 2 });
// read
let read0 = cow_val.read().unwrap();
// ...
drop(read0);
// write new non-exclusivly
let mut write0 = cow_val.try_clone().unwrap();
write0.s = 3;
write0.commit().unwrap();
// write new exclusivly
let mut write0 = cow_val.try_clone_exclusivly().unwrap();
write0.s = 3;
write0.commit().unwrap();
Implementations§
Source§impl<ITEM: Debug + Send> ICoW<ITEM>
impl<ITEM: Debug + Send> ICoW<ITEM>
Sourcepub fn get_lock_type() -> ICoWLockTypes
pub fn get_lock_type() -> ICoWLockTypes
Returns the syncing meachanism.
Source§impl<ITEM: Debug + Send> ICoW<ITEM>
impl<ITEM: Debug + Send> ICoW<ITEM>
Sourcepub fn read(&self) -> ICoWRead<'_, ITEM>
pub fn read(&self) -> ICoWRead<'_, ITEM>
Attempts to read the inner value returning the guard. This function blocks the current thread until the value becomes available. This can happen if exclusive copy-on-write is in progress.
§Returns
An instance with clonned reference is returned.
Sourcepub fn try_read(&self) -> Option<ICoWRead<'_, ITEM>>
pub fn try_read(&self) -> Option<ICoWRead<'_, ITEM>>
Attempts to read the inner value returning the guard. This function does not block the current thread until the value becomes available. This function fails if exclusive copy-on-write is in progress.
But, this fucntion would block the thread until the Backoff reports that it is recomended to park the thread.
§Returns
A Option is retrurned. The Option::None is returned if operation would block for a long time.
Sourcepub fn try_new_exclusivly(&self, new_item: ITEM) -> Option<ICoWLock<'_, ITEM>>
pub fn try_new_exclusivly(&self, new_item: ITEM) -> Option<ICoWLock<'_, ITEM>>
Attempts to grab the exclusive Copy-on-Write to prevent duplicate writing.
Non-blocking function i.e returns if it fails to acquire the clone before some deadline.
§Returns
An Option is returned where the Option::None is returned if an exclusive CoW lock have already been issued.
Sourcepub fn try_new_inplace(&self, new_item: ITEM) -> Result<(), (ICoWError, ITEM)>
pub fn try_new_inplace(&self, new_item: ITEM) -> Result<(), (ICoWError, ITEM)>
Attempts to update old value to new value for the inner.
Non-blocking function i.e returns if it fails to acquire the clone before some deadline.
Does not return guard. Updates the value in-place.
§Returns
A Result is returned where the Result::Err is returned with:
-
ICoWError::ExclusiveLockPending - if exclsive write already pending.
-
errors which are returned by ICoWCopy::commit().
Sourcepub fn try_new_exclusivly_inplace(
&self,
new_item: ITEM,
) -> Result<(), (ICoWError, ITEM)>
pub fn try_new_exclusivly_inplace( &self, new_item: ITEM, ) -> Result<(), (ICoWError, ITEM)>
Attempts to update old value to new value for the inner exclusively.
Non-blocking function i.e returns if it fails to acquire the clone before some deadline.
Does not return guard. Updates the value in-place.
§Returns
A Result is returned where the Result::Err is returned with:
-
ICoWError::ExclusiveLockPending - if exclsive write already pending.
-
ICoWError::AlreadyUpdated - if duplicate write operation attempt.
-
ICoWError::RaceCondition - a race condition detected during update.
-
errors which are returned by ICoWCopy::commit().
Source§impl<ITEM: Debug + Send + Copy> ICoW<ITEM>
impl<ITEM: Debug + Send + Copy> ICoW<ITEM>
Sourcepub fn try_copy(&self) -> Option<ICoWCopy<'_, ITEM>>
pub fn try_copy(&self) -> Option<ICoWCopy<'_, ITEM>>
Attempts to perform the copy of the inner value for writing.
Non-blocking function i.e returns if it fails to acquire the copy before some deadline.
§Returns
An Option is returned where the Option::None is returned if it failed.
Sourcepub fn try_copy_exclusivly(&self) -> Option<ICoWLock<'_, ITEM>>
pub fn try_copy_exclusivly(&self) -> Option<ICoWLock<'_, ITEM>>
Attempts to perform the copy of the inner value for exclusive writing.
Non-blocking function i.e returns if it fails to acquire the copy before some deadline.
§Returns
An Option is returned where the Option::None is returned if an exclusive CoW lock have already been issued.
Source§impl<ITEM: Debug + Send + Clone> ICoW<ITEM>
impl<ITEM: Debug + Send + Clone> ICoW<ITEM>
Sourcepub fn try_clone(&self) -> Option<ICoWCopy<'_, ITEM>>
pub fn try_clone(&self) -> Option<ICoWCopy<'_, ITEM>>
Attempts to perform the clone of the inner value for writing.
Non-blocking function i.e returns if it fails to acquire the clone before some deadline.
§Returns
An Option is returned where the Option::None is returned if it failed.
Sourcepub fn try_clone_exclusivly(&self) -> Option<ICoWLock<'_, ITEM>>
pub fn try_clone_exclusivly(&self) -> Option<ICoWLock<'_, ITEM>>
Attempts to perform the clone of the inner value for exclusive writing.
Non-blocking function i.e returns if it fails to acquire the clone before some deadline.
§Returns
An Option is returned where the Option::None is returned if an exclusive CoW lock have already been issued.
Source§impl<ITEM: Debug + Send + Default> ICoW<ITEM>
impl<ITEM: Debug + Send + Default> ICoW<ITEM>
Sourcepub fn try_default(&self) -> Option<ICoWCopy<'_, ITEM>>
pub fn try_default(&self) -> Option<ICoWCopy<'_, ITEM>>
Attempts to init default of the inner value for writing.
Non-blocking function i.e returns if it fails to acquire the clone before some deadline.
§Returns
An Option is returned where the Option::None is returned if it failed.
Sourcepub fn try_default_exclusivly(&self) -> Option<ICoWLock<'_, ITEM>>
pub fn try_default_exclusivly(&self) -> Option<ICoWLock<'_, ITEM>>
Attempts to init default of the inner value for exclusive writing.
Non-blocking function i.e returns if it fails to acquire the clone before some deadline.
§Returns
An Option is returned where the Option::None is returned if an exclusive CoW lock have already been issued.