Struct Switch

Source
pub struct Switch<T> { /* private fields */ }
Expand description

Collection that contains several versions/options of data so you can switch between them in sequential manner. It can be used to produce next data frame based on previous data frame.

§Example

use psyche_utils::switch::Switch;

let mut switch = Switch::new(2, vec![1, 2, 4]);
if let Some((prev, next)) = switch.iterate() {
    for i in 0..prev.len() {
        // next frame item equals sum of two neighbors.
        let start = i.max(1) - 1;
        let end = (i + 2).min(prev.len());
        next[i] = (start..end).map(|i| prev[i]).sum();
    }
}
assert_eq!(switch.get().unwrap(), &vec![3, 7, 6]);

Implementations§

Source§

impl<T> Switch<T>

Source

pub fn new(options: usize, value: T) -> Self
where T: Clone,

Creates new switch with number of options and cloned value applied for each of them.

§Arguments
  • options - Number of options that switch will hold.
  • value - Initial value applied for each of options.
§Return

Instance of switch.

§Example
use psyche_utils::switch::Switch;

let switch = Switch::new(2, vec![1, 2, 4]);
Source

pub fn with_options(options: Vec<T>) -> Self

Creates new switch with initial options values.

§Note

Make sure that your options values have same length if they are for example arrays or vectors or any other collection that needs to have same length across each iteration.

§Arguments
  • options - Initial values applied for options.
§Return

Instance of switch.

§Example
use psyche_utils::switch::Switch;

let switch = Switch::with_options(vec![
    vec![1, 2, 4],
    vec![3, 7, 6],
]);
Source

pub fn index(&self) -> usize

Gets currently active option index.

§Return

Index of currently active switch option.

§Example
use psyche_utils::switch::Switch;

let mut switch = Switch::new(2, 0);
assert_eq!(switch.index(), 0);
switch.switch();
assert_eq!(switch.index(), 1);
switch.switch();
assert_eq!(switch.index(), 0);
Source

pub fn count(&self) -> usize

Gets number of options that holds.

§Return

Number of switch options.

§Example
use psyche_utils::switch::Switch;

let mut switch = Switch::new(2, 0);
assert_eq!(switch.count(), 2);
Source

pub fn switch(&mut self)

Switches to next option.

§Example
use psyche_utils::switch::Switch;

let mut switch = Switch::with_options(vec![0, 1]);
assert_eq!(*switch.get().unwrap(), 0);
switch.switch();
assert_eq!(*switch.get().unwrap(), 1);
Source

pub fn iterate(&mut self) -> Option<(&T, &mut T)>

Switches to next option and returns pair of previous and next options.

§Return

Pair of previous and next options if holds more than one.

§Example
use psyche_utils::switch::Switch;

let mut switch = Switch::with_options(vec![0, 1]);
assert_eq!(switch.iterate().unwrap(), (&0, &mut 1));
Source

pub fn get(&self) -> Option<&T>

Gets currently active option if any.

§Return

Reference to currently active option.

§Example
use psyche_utils::switch::Switch;

let mut switch = Switch::with_options(vec![0, 1]);
assert_eq!(switch.get().unwrap(), &0);
Source

pub fn get_mut(&mut self) -> Option<&mut T>

Gets currently active option if any.

§Return

Mutable reference to currently active option.

§Example
use psyche_utils::switch::Switch;

let mut switch = Switch::with_options(vec![0, 1]);
assert_eq!(switch.get_mut().unwrap(), &mut 0);

Trait Implementations§

Source§

impl<'de, T> Deserialize<'de> for Switch<T>
where T: Deserialize<'de>,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<T> Serialize for Switch<T>
where T: Serialize,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Switch<T>

§

impl<T> RefUnwindSafe for Switch<T>
where T: RefUnwindSafe,

§

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

§

impl<T> Sync for Switch<T>
where T: Sync,

§

impl<T> Unpin for Switch<T>
where T: Unpin,

§

impl<T> UnwindSafe for Switch<T>
where T: 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, 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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,