pub struct VecComputation<T, C = T, Marker = IndividualVariable>where
T: Send + Sync + 'static,
C: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,{ /* private fields */ }
Expand description
A computation with a dynamic set of variables. Variables can be treated as single variable or as a group of variables.
let v1 = Variable::<u32>::new(1);
let v2 = Variable::<u32>::new(2);
let v3 = Variable::<u32>::new(3);
// Create a new computation `c1` with `v1` and `v2` as initial set of variables.
let mut c1 = VecComputation::<u32>::new(|v| v.into_iter().fold(0, |a, b| a + b), (&v1, &v2));
println!("{} == 3", *c1.read_result());
// Add `v3` to the set of varibles.
c1.push(&v3);
println!("{} == 6", *c1.read_result());
// Remove `v2` to the set of varibles.
c1.remove(&v2);
println!("{} == 4", *c1.read_result());
// Change the value of `v1`
v1.set(4);
println!("{} == 7", *c1.read_result());
Example of a VecComputation
with grouped variables:
let v1: Variable<i32> = 0.into();
let v2: Variable<u32> = 1.into();
let v3: Variable<i32> = 2.into();
// Create a vec computation where the vector is made of a tuple of reference to i32 and u32 variables.
let mut c1 = VecComputation::<i32, (i32, u32, i32), markers::GroupedVariables>::new(
|v: Vec<(&i32, &u32, &i32)>| v.into_iter().fold(0, |a, (b, c, d)| a + b + *c as i32 + d),
(&(&v1, &v2, &v3),),
);
Implementations§
Source§impl<T, C, Marker> VecComputation<T, C, Marker>where
T: Send + Sync + 'static,
C: Send + Sync + 'static,
Marker: 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
impl<T, C, Marker> VecComputation<T, C, Marker>where
T: Send + Sync + 'static,
C: Send + Sync + 'static,
Marker: 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
Sourcepub fn new<TVars>(
formula: impl for<'a> Fn(Vec<<VecComputationFArgsSelector<C, Marker> as VecComputationFArgsSelectorTrait>::FArgs<'a>>) -> T + 'static + Send + Sync,
tvars: TVars,
) -> Selfwhere
TVars: ComputationVecBuilder<C, Marker>,
pub fn new<TVars>(
formula: impl for<'a> Fn(Vec<<VecComputationFArgsSelector<C, Marker> as VecComputationFArgsSelectorTrait>::FArgs<'a>>) -> T + 'static + Send + Sync,
tvars: TVars,
) -> Selfwhere
TVars: ComputationVecBuilder<C, Marker>,
Create a new computation with the given formula and an initial vector of variables.
Sourcepub fn read_result<'a>(&'a self) -> impl Deref<Target = T> + 'a
pub fn read_result<'a>(&'a self) -> impl Deref<Target = T> + 'a
Get the result of the computation. Re-compute it if outdated.
Source§impl<T, C> VecComputation<T, C>
impl<T, C> VecComputation<T, C>
Sourcepub fn sum<TVars>(tvars: TVars) -> Selfwhere
TVars: ComputationVecBuilder<C, IndividualVariable>,
pub fn sum<TVars>(tvars: TVars) -> Selfwhere
TVars: ComputationVecBuilder<C, IndividualVariable>,
Create a VecComputation that computes the sum of the variables.
Source§impl<T, C> VecComputation<T, C>
impl<T, C> VecComputation<T, C>
Sourcepub fn sum_ref<TVars>(tvars: TVars) -> Selfwhere
TVars: ComputationVecBuilder<C, IndividualVariable>,
pub fn sum_ref<TVars>(tvars: TVars) -> Selfwhere
TVars: ComputationVecBuilder<C, IndividualVariable>,
Create a VecComputation that computes the sum of the variables.
Source§impl<T, C> VecComputation<T, C>
impl<T, C> VecComputation<T, C>
Sourcepub fn average<TVars>(tvars: TVars) -> Selfwhere
TVars: ComputationVecBuilder<C, IndividualVariable>,
pub fn average<TVars>(tvars: TVars) -> Selfwhere
TVars: ComputationVecBuilder<C, IndividualVariable>,
Create a VecComputation that computes the average of the variables.
Trait Implementations§
Source§impl<T, C, Marker: Debug> Debug for VecComputation<T, C, Marker>where
T: Send + Sync + 'static + Debug,
C: Send + Sync + 'static + Debug,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
impl<T, C, Marker: Debug> Debug for VecComputation<T, C, Marker>where
T: Send + Sync + 'static + Debug,
C: Send + Sync + 'static + Debug,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
Source§impl<T, C, Marker> PartialEq<T> for VecComputation<T, C, Marker>where
T: PartialEq + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
impl<T, C, Marker> PartialEq<T> for VecComputation<T, C, Marker>where
T: PartialEq + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
Source§impl<T, C, Marker> PartialEq for VecComputation<T, C, Marker>where
T: PartialEq + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
impl<T, C, Marker> PartialEq for VecComputation<T, C, Marker>where
T: PartialEq + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
Source§impl<T, C, Marker> PartialOrd<T> for VecComputation<T, C, Marker>where
T: PartialOrd + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
impl<T, C, Marker> PartialOrd<T> for VecComputation<T, C, Marker>where
T: PartialOrd + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
Source§impl<T, C, Marker> PartialOrd for VecComputation<T, C, Marker>where
T: PartialOrd + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
impl<T, C, Marker> PartialOrd for VecComputation<T, C, Marker>where
T: PartialOrd + Send + Sync,
C: Send + Sync + 'static,
Marker: Send + Sync + 'static,
VecComputationFArgsSelector<C, Marker>: VecComputationFArgsSelectorTrait,
Auto Trait Implementations§
impl<T, C, Marker> Freeze for VecComputation<T, C, Marker>
impl<T, C, Marker> RefUnwindSafe for VecComputation<T, C, Marker>where
Marker: RefUnwindSafe,
impl<T, C, Marker> Send for VecComputation<T, C, Marker>where
Marker: Send,
impl<T, C, Marker> Sync for VecComputation<T, C, Marker>where
Marker: Sync,
impl<T, C, Marker> Unpin for VecComputation<T, C, Marker>where
Marker: Unpin,
impl<T, C, Marker> UnwindSafe for VecComputation<T, C, Marker>where
Marker: UnwindSafe,
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
Mutably borrows from an owned value. Read more