pub struct Tick<L> { /* private fields */ }Expand description
Marks the stream as being inside the single global clock domain.
Implementations§
Source§impl<'a, L> Tick<L>where
L: Location<'a>,
impl<'a, L> Tick<L>where
L: Location<'a>,
Sourcepub fn outer(&self) -> &L
pub fn outer(&self) -> &L
Returns a reference to the outer (parent) location that this tick is nested within.
For example, if a Tick was created from a Process, this returns a reference
to that Process.
Sourcepub fn spin_batch(
&self,
batch_size: impl QuotedWithContext<'a, usize, L> + Copy + 'a,
) -> Stream<(), Self, Bounded, TotalOrder, ExactlyOnce>where
L: NoTick,
pub fn spin_batch(
&self,
batch_size: impl QuotedWithContext<'a, usize, L> + Copy + 'a,
) -> Stream<(), Self, Bounded, TotalOrder, ExactlyOnce>where
L: NoTick,
Creates a bounded stream of () values inside this tick, with a fixed batch size.
This is useful for driving computations inside a tick that need to process
a specific number of elements per tick. Each tick will produce exactly
batch_size unit values.
Sourcepub fn singleton<T>(
&self,
e: impl QuotedWithContext<'a, T, Tick<L>>,
) -> Singleton<T, Self, Bounded>where
T: Clone,
pub fn singleton<T>(
&self,
e: impl QuotedWithContext<'a, T, Tick<L>>,
) -> Singleton<T, Self, Bounded>where
T: Clone,
Constructs a Singleton materialized inside this tick with the given static value.
The singleton will have the provided value on every tick. This is useful for providing constant values to computations inside a tick.
Sourcepub fn optional_first_tick<T: Clone>(
&self,
e: impl QuotedWithContext<'a, T, Tick<L>>,
) -> Optional<T, Self, Bounded>
pub fn optional_first_tick<T: Clone>( &self, e: impl QuotedWithContext<'a, T, Tick<L>>, ) -> Optional<T, Self, Bounded>
Creates an Optional which will have the provided static value on the first tick, and be
null on all subsequent ticks.
This is useful for bootstrapping stateful computations which need an initial value.
§Example
let tick = process.tick();
// ticks are lazy by default, forces the second tick to run
tick.spin_batch(q!(1)).all_ticks().for_each(q!(|_| {}));
let optional = tick.optional_first_tick(q!(5));
optional.unwrap_or(tick.singleton(q!(123))).all_ticks()
// 5, 123, 123, 123, ...Sourcepub fn cycle<S>(&self) -> (TickCycleHandle<'a, S>, S)
pub fn cycle<S>(&self) -> (TickCycleHandle<'a, S>, S)
Creates a feedback cycle within this tick for implementing iterative computations.
Returns a handle that must be completed with the actual collection, and a placeholder collection that represents the output of the previous tick (deferred by one tick). This is useful for implementing fixed-point computations where the output of one tick feeds into the input of the next.
The cycle automatically defers values by one tick to prevent infinite recursion.
Sourcepub fn cycle_with_initial<S>(&self, initial: S) -> (TickCycleHandle<'a, S>, S)where
S: CycleCollectionWithInitial<'a, TickCycle, Location = Self>,
pub fn cycle_with_initial<S>(&self, initial: S) -> (TickCycleHandle<'a, S>, S)where
S: CycleCollectionWithInitial<'a, TickCycle, Location = Self>,
Creates a feedback cycle with an initial value for the first tick.
Similar to Tick::cycle, but allows providing an initial collection
that will be used as the value on the first tick before any feedback
is available. This is useful for bootstrapping iterative computations
that need a starting state.
Trait Implementations§
Source§impl<'a, L> Location<'a> for Tick<L>where
L: Location<'a>,
impl<'a, L> Location<'a> for Tick<L>where
L: Location<'a>,
Source§fn id(&self) -> LocationId
fn id(&self) -> LocationId
Source§fn singleton<T>(
&self,
e: impl QuotedWithContext<'a, T, Self>,
) -> Singleton<T, Self, Bounded>
fn singleton<T>( &self, e: impl QuotedWithContext<'a, T, Self>, ) -> Singleton<T, Self, Bounded>
Source§fn forward_ref<S>(&self) -> (ForwardHandle<'a, S>, S)where
S: CycleCollection<'a, ForwardRef, Location = Self>,
fn forward_ref<S>(&self) -> (ForwardHandle<'a, S>, S)where
S: CycleCollection<'a, ForwardRef, Location = Self>,
impl<'a, L> NoAtomic for Tick<L>where
L: Location<'a>,
Auto Trait Implementations§
impl<L> Freeze for Tick<L>where
L: Freeze,
impl<L> RefUnwindSafe for Tick<L>where
L: RefUnwindSafe,
impl<L> Send for Tick<L>where
L: Send,
impl<L> Sync for Tick<L>where
L: Sync,
impl<L> Unpin for Tick<L>where
L: Unpin,
impl<L> UnsafeUnpin for Tick<L>where
L: UnsafeUnpin,
impl<L> UnwindSafe for Tick<L>where
L: 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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