[−][src]Struct drying_paint::Watched
This represents some value which will be interesting to watch. Watcher functions that reference this value will be re-run when this value changes.
Methods
impl<T> Watched<T>
[src]
impl<T: PartialEq> Watched<T>
[src]
pub fn set_if_neq(wrapper: &mut Watched<T>, value: T)
[src]
This function provides a way to set a value for a watched value only if is has changed. This is useful for cases where setting a value would otherwise cause an infinite loop.
Examples
The following example uses the watch system to keep two variables in sync. This would normally cause an infinite loop as each update of one would cause the other one to re-evaluate. However using set_if_neq allows it to detect that the value is the same and stop propogating.
#[derive(Default)] struct KeepBalanced { left: Watched<i32>, right: Watched<i32>, } impl WatcherInit for KeepBalanced { fn init(watcher: &mut WatcherMeta<Self>) { watcher.watch(|root| { Watched::set_if_neq(&mut root.left, *root.right); }); watcher.watch(|root| { Watched::set_if_neq(&mut root.right, *root.left); }); } } fn main() { let mut ctx = WatchContext::new(); ctx.set_frame_limit(Some(100)); ctx.with(|| { let mut obj = Watcher::<KeepBalanced>::new(); *obj.data_mut().left = 68; WatchContext::update_current(); assert_eq!(*obj.data().right, 68); }); }
Trait Implementations
impl<T: Clone> Clone for Watched<T>
[src]
impl<T: Debug> Debug for Watched<T>
[src]
impl<T: Default> Default for Watched<T>
[src]
impl<T> Deref for Watched<T>
[src]
impl<T> DerefMut for Watched<T>
[src]
impl<T: Display> Display for Watched<T>
[src]
impl<T: Eq> Eq for Watched<T>
[src]
impl<T: Ord> Ord for Watched<T>
[src]
fn cmp(&self, other: &Watched<T>) -> Ordering
[src]
fn max(self, other: Self) -> Self
1.21.0[src]
fn min(self, other: Self) -> Self
1.21.0[src]
fn clamp(self, min: Self, max: Self) -> Self
[src]
impl<T: PartialEq> PartialEq<Watched<T>> for Watched<T>
[src]
impl<T: PartialOrd> PartialOrd<Watched<T>> for Watched<T>
[src]
Auto Trait Implementations
impl<T> !RefUnwindSafe for Watched<T>
impl<T> !Send for Watched<T>
impl<T> !Sync for Watched<T>
impl<T> Unpin for Watched<T> where
T: Unpin,
T: Unpin,
impl<T> !UnwindSafe for Watched<T>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = !
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,