Skip to main content

SwitchBlock

Struct SwitchBlock 

Source
pub struct SwitchBlock<T: Apply>
where T::Output: DefaultStorage, BlockData: FromPass<T::Output>,
{ pub data: BlockData, /* private fields */ }
Expand description

Switches between multiple input signals based on a condition.

The condition is the first input, and the rest are the signals to switch between. The block will output the signal that corresponds to the index of the `cases`` parameter that matches the condition input. If no matches are found, it will output the last input. For example:

use core::time::Duration;
use pictorus_blocks::SwitchBlock;
use pictorus_traits::ProcessBlock;
use pictorus_block_data::BlockData as OldBlockData;
use pictorus_traits::Context;

#[derive(Default)]
struct StubContext {}

impl Context for StubContext {
    fn time(&self) -> Duration {
        Duration::from_secs(0)
    }

    fn timestep(&self) -> Option<Duration> {
        None
    }

    fn fundamental_timestep(&self) -> Duration {
        Duration::from_millis(100)
    }
}

let ctxt = StubContext::default();
let mut block = SwitchBlock::<(f64, f64, f64)>::default();
// If condition is 0, output the signal at index 0
// If condition is 1, output the signal at index 1
// If condition is anything else, output the signal at index 1
let cases = OldBlockData::from_vector(&[0.0, 1.0]);
let parameters = <SwitchBlock<(f64, f64, f64)> as ProcessBlock>::Parameters::new(&cases);
// Here we have a condition of 0.0, and inputs of [1.0, 2.0]
// Since condition matches case 0, the output will be 1.0
let input = (0.0, 1.0, 2.0);
let output = block.process(&parameters, &ctxt, input);
assert_eq!(output, 1.0);

Fields§

§data: BlockData

Trait Implementations§

Source§

impl<T: Apply> Default for SwitchBlock<T>
where T::Output: DefaultStorage, BlockData: FromPass<T::Output>,

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<T: Apply> ProcessBlock for SwitchBlock<T>
where T::Output: DefaultStorage, BlockData: FromPass<T::Output>,

Source§

type Inputs = T

Source§

type Output = <T as Apply>::Output

Source§

type Parameters = <T as Apply>::Parameters

Source§

fn process<'b>( &'b mut self, parameters: &Self::Parameters, _context: &dyn Context, inputs: PassBy<'_, Self::Inputs>, ) -> PassBy<'b, Self::Output>

Auto Trait Implementations§

§

impl<T> Freeze for SwitchBlock<T>
where <<T as Apply>::Output as DefaultStorage>::Storage: Freeze,

§

impl<T> RefUnwindSafe for SwitchBlock<T>
where <<T as Apply>::Output as DefaultStorage>::Storage: RefUnwindSafe,

§

impl<T> Send for SwitchBlock<T>
where <<T as Apply>::Output as DefaultStorage>::Storage: Send,

§

impl<T> Sync for SwitchBlock<T>
where <<T as Apply>::Output as DefaultStorage>::Storage: Sync,

§

impl<T> Unpin for SwitchBlock<T>
where <<T as Apply>::Output as DefaultStorage>::Storage: Unpin,

§

impl<T> UnsafeUnpin for SwitchBlock<T>
where <<T as Apply>::Output as DefaultStorage>::Storage: UnsafeUnpin,

§

impl<T> UnwindSafe for SwitchBlock<T>
where <<T as Apply>::Output as DefaultStorage>::Storage: UnwindSafe,

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

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.