Skip to main content

Iterative

Struct Iterative 

Source
pub struct Iterative<E: IterativeEval> {
    eval: E,
    initial: E::Output,
    sim_step: f64,
    snapshot: RefCell<Snapshot<E::Output>>,
}
Expand description

Adapter turning an IterativeEval into the general Eval protocol.

The adapter owns the segment’s definition — the initial state, the sim_step, and the stepping closure — all immutable. The only mutation is the snapshot cache (alpha + state) behind a RefCell, so eval_alpha(target) integrates to target only when target is ahead of the snapshot, resets and replays when behind, and otherwise returns the cached state directly. Repeated queries at the same alpha are O(1).

ⓘ
let sim_secs = 10.0;
let animation = Iterative::from_fn(state0, move |state, _alpha, delta_alpha| {
    state.integrate(sim_secs * delta_alpha);
})
.with_steps(240)
.with_duration(sim_secs);

Fields§

§eval: E§initial: E::Output§sim_step: f64§snapshot: RefCell<Snapshot<E::Output>>

Implementations§

Source§

impl<E> Iterative<E>
where E: IterativeEval, E::Output: Clone,

Source

pub fn new(initial: E::Output, eval: E) -> Self

Create an iterative segment from an initial state and a named IterativeEval implementation.

The content step defaults to 1 / 120 of normalized progress. Call with_steps to override it, e.g. .with_steps(240) for 1 / 240 progress increments.

Source

pub fn with_steps(self, n: usize) -> Self

Declare the content’s step count N.

The segment then integrates in uniform 1 / N progress increments, so every IterativeEval::step call receives delta_alpha = 1 / N. Without this call the default is 1 / 120 (DEFAULT_SIM_STEP).

This is the segment’s content resolution, not the render sampling rate and not the scene clock. A physical time step can be recovered as duration_secs * delta_alpha.

ⓘ
Iterative::from_fn(initial_state, step_function)
    .with_steps(240) // 1/240 progress per integration step
    .with_duration(10.0); // => 1/24 seconds per integration step
Source§

impl<S, F> Iterative<IterativeFn<S, F>>
where S: Clone, F: Fn(&mut S, f64, f64),

Source

pub fn from_fn(initial: S, eval: F) -> Self

Create an iterative segment from an initial state and a stepping function.

Uses the default 1 / 120 content step; call with_steps to choose another resolution.

Trait Implementations§

Source§

impl<E> Eval for Iterative<E>
where E: IterativeEval, E::Output: Clone,

Source§

type Output = <E as IterativeEval>::Output

Value produced by this evaluator.
Source§

fn sim_step(&self) -> Option<f64>

The content resolution declared by iterative segments: 1/N progress per integration step (N declared via Iterative::with_steps). Read more
Source§

fn eval_alpha(&self, target: f64) -> Self::Output

Evaluate the segment’s content at normalized progress alpha.

Auto Trait Implementations§

§

impl<E> !Freeze for Iterative<E>

§

impl<E> !RefUnwindSafe for Iterative<E>

§

impl<E> !Sync for Iterative<E>

§

impl<E> Send for Iterative<E>
where E: Send, <E as IterativeEval>::Output: Send,

§

impl<E> Unpin for Iterative<E>
where E: Unpin, <E as IterativeEval>::Output: Unpin,

§

impl<E> UnsafeUnpin for Iterative<E>

§

impl<E> UnwindSafe for Iterative<E>

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
§

impl<T> ConditionalSend for T
where T: Send,

Source§

impl<T> Discard for T

Source§

fn discard(&self)

Simply returns ()
Source§

impl<E> EvalExt for E
where E: Eval,

Source§

fn apply_alpha_to(self, item: &mut Self::Output, alpha: f64) -> Self

Write the state at progress alpha into item and return this evaluator (defined through eval_alpha).
Source§

fn apply_to(self, item: &mut Self::Output) -> Self

Write the end state (alpha == 1.0) into item and return this evaluator (defined through EvalExt::apply_alpha_to).
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<E> IntoAnimNode for E
where E: Eval + 'static, <E as Eval>::Output: AnyExtractCoreItem,

Source§

fn into_anim_node(self) -> AnimNode

Lower this definition into its local runtime representation.
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoResult<T> for T

§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

§

fn into_sample(self) -> T

Source§

impl<A> PlaybackExt for A
where A: Unplaced,

Source§

fn with_rate_func(self, rate_func: fn(f64) -> f64) -> Paramed<Self>

Change the animation’s rate function.
Source§

fn with_duration(self, duration_secs: f64) -> Paramed<Self>

Change the animation’s duration.
Source§

fn with_enabled(self, enabled: bool) -> Paramed<Self>

Enable or disable this animation’s output.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> TransformedExt for T

Source§

fn transformed<G>(self, transform: G) -> Transformed<Self, G>

Return self wrapped with transform stored exactly as G.
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.
Source§

impl<E> Unplaced for E
where E: Eval + 'static, <E as Eval>::Output: AnyExtractCoreItem,

Source§

fn at(self, offset_sec: f64) -> At<Self>

Place this definition at an offset in its parent’s local time coordinates.
Source§

impl<T> With for T

Source§

fn with(self, f: impl Fn(&mut Self)) -> Self
where Self: Sized,

Mutating a value in place
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more