ICoW

Struct ICoW 

Source
pub struct ICoW<ITEM: Sized> { /* private fields */ }
Expand description

A main structure which implements CoW approach based on [RwLock]. The object stored inside can be read directly, but modifying the inner value is performed using CoW copy-on-write approach.

The read operations are faster than write, because in order to write a more operations needs to be performed.

This is for Mutlithreading environment only. It will be usedless when using in single-thread programs. For the single thread, use a SICoW which would improve the performance.

The inner value must be 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_copy().unwrap();
write0.s = 3;
 
write0.commit().unwrap();
 
// write new exclusivly
let mut write0 = cow_val.try_clone_copy_exclusivly().unwrap();
write0.s = 3;
 
write0.commit().unwrap(); 
 

Implementations§

Source§

impl<ITEM> ICoW<ITEM>

Source

pub fn new(item: ITEM) -> Self

Initalizes a new instance.

Source

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.

Source

pub fn new_inplace(&self, new_item: ITEM)

Updates old value to new value for the inner.

Source§

impl<ITEM: Debug + Copy> ICoW<ITEM>

Source

pub fn copy(&self) -> ICoWCopy<'_, ITEM>

Performs the copy of the inner value for writing.

Blocking function i.e always retruns the result.

§Returns

An ICoWCopy is returned.

Source§

impl<ITEM: Debug + Clone> ICoW<ITEM>

Source

pub fn clone_copy(&self) -> ICoWCopy<'_, ITEM>

[!IMPORTANT] Previously clone(). renamed to clone_copy() due to the conflict with Clone.

Attempts to perform the clone of the inner value for writing.

Blocking function i.e always retruns the result.

§Returns

An ICoWCopy is returned.

Source§

impl<ITEM: Debug + Default> ICoW<ITEM>

Source

pub fn from_default(&self) -> ICoWCopy<'_, ITEM>

Construct the guard from the Default of the inner value for writing.

Blocking function i.e always retruns the result.

§Returns

An Option is returned where the Option::None is returned if it failed.

Trait Implementations§

Source§

impl<ITEM: Debug + Sized> Debug for ICoW<ITEM>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<ITEM> ICowType for ICoW<ITEM>

Auto Trait Implementations§

§

impl<ITEM> !Freeze for ICoW<ITEM>

§

impl<ITEM> !RefUnwindSafe for ICoW<ITEM>

§

impl<ITEM> !Send for ICoW<ITEM>

§

impl<ITEM> !Sync for ICoW<ITEM>

§

impl<ITEM> Unpin for ICoW<ITEM>

§

impl<ITEM> UnwindSafe for ICoW<ITEM>
where ITEM: RefUnwindSafe,

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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.