[][src]Struct pair_macro::Triplet

pub struct Triplet<T> {
    pub x: T,
    pub y: T,
    pub z: T,
}

Represents a pair consisting of 3 values.

Fields

x: Ty: Tz: T

Implementations

impl<T> Triplet<T>[src]

pub const fn new(x: T, y: T, z: T) -> Triplet<T>[src]

Creates a new pair.

Examples

use pair_macro::Pair;

let p = Pair::new(1, 2);
assert_eq!(1, p.x);
assert_eq!(2, p.y);

pub fn from_cloned(value: T) -> Triplet<T> where
    T: Clone
[src]

Creates a new pair by cloning the specified value.

Examples

use pair_macro::Pair;

let p = Pair::from_cloned([1, 2]);
assert_eq!([1, 2], p.x);
assert_eq!([1, 2], p.y);

pub const fn as_ref(&self) -> Triplet<&T>[src]

Converts from &name<T> to name<&T>.

Examples

use pair_macro::Pair;

let p = Pair::new(1, 2);
let q = p.as_ref();

assert_eq!(Pair::new(&1, &2), q);

pub fn as_mut(&mut self) -> Triplet<&mut T>[src]

Converts from &mut name<T> to name<&mut T>.

Examples

use pair_macro::Pair;

let mut p = Pair::new(1, 2);
let q = p.as_mut();

assert_eq!(Pair::new(&mut 1, &mut 2), q);

pub fn map<U, F>(self, f: F) -> Triplet<U> where
    F: FnMut(T) -> U, 
[src]

Applies an unary operation f to each value.

Examples

use pair_macro::Pair;

let p = Pair::new(1, 2).map(|value| value * 2);
assert_eq!(2, p.x);
assert_eq!(4, p.y);

pub fn map_in_place<F>(&mut self, f: F) -> &mut Triplet<T> where
    F: FnMut(&mut T), 
[src]

Applies an unary operation f in-place.

Returns

A mutable reference to itself.

Examples

use pair_macro::Pair;

let mut p = Pair::new(2, 3);
p.map_in_place(|value| *value += 1)
    .map_in_place(|value| *value *= 2);
assert_eq!(6, p.x);
assert_eq!(8, p.y);

pub fn map_entrywise<U, V, F>(self, rhs: Triplet<U>, f: F) -> Triplet<V> where
    F: FnMut(T, U) -> V, 
[src]

Applies a binary operation f that takes two values, then produces another pair.

Examples

use pair_macro::Pair;

let p = Pair::new(6, 8);
let q = Pair::new(3, 2);
let r = p.map_entrywise(q, |lhs, rhs| lhs / rhs);
assert_eq!(2, r.x);
assert_eq!(4, r.y);

pub fn map_entrywise_in_place<U, F>(
    &mut self,
    rhs: Triplet<U>,
    f: F
) -> &mut Triplet<T> where
    F: FnMut(&mut T, U), 
[src]

Applies a binary operation f that takes two values, then stores the result in-place.

Returns

A mutable reference to itself.

Examples

use pair_macro::Pair;

let mut p = Pair::new(2, 3);
let q = Pair::new(4, 5);
let r = Pair::new(6, 7);
p.map_entrywise_in_place(q, |lhs, rhs| *lhs += rhs)
    .map_entrywise_in_place(r, |lhs, rhs| *lhs *= rhs);
assert_eq!(36, p.x);
assert_eq!(56, p.y);

pub fn fold<U, F>(self, init: U, f: F) -> U where
    F: FnMut(U, T) -> U, 
[src]

👎 Deprecated since 0.1.3:

Use into_iter().fold(init, f) instead

Applies a function f to each values, then produces a single, final value.

Params

  1. init the initial value that the accumulator will have on the first call.
  2. f accumulator that takes two arguments: current accumation and an value.

Examples

use pair_macro::Pair;

let p = Pair::new(2, 3);
let sum = p.fold(0, |accumulate, current| accumulate + current);
let product = p.fold(1, |accumulate, current| accumulate * current);
assert_eq!(5, sum);
assert_eq!(6, product);

pub fn iter(&self) -> impl Iterator<Item = &T> + '_[src]

Returns an iterator that yields references of each value.

Examples

use pair_macro::Pair;

let p = Pair::new(2, 3);
let mut iter = p.iter();
assert_eq!(Some(&2), iter.next());
assert_eq!(Some(&3), iter.next());
assert!(iter.next().is_none());

pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T> + '_[src]

Returns an iterator that yields mutable references of each value.

Examples

use pair_macro::Pair;

let mut p = Pair::new(2, 3);
let mut iter = p.iter_mut();
assert_eq!(Some(&mut 2), iter.next());
assert_eq!(Some(&mut 3), iter.next());
assert!(iter.next().is_none());

pub fn into_iter(self) -> impl Iterator<Item = T>[src]

Consuming this pair, returns an iterator that yields each value.

Examples

use pair_macro::Pair;

let p = Pair::new(2, 3);
let mut iter = p.into_iter();
assert_eq!(Some(2), iter.next());
assert_eq!(Some(3), iter.next());
assert!(iter.next().is_none());

impl<T: Deref> Triplet<T>[src]

pub fn as_deref(&self) -> Triplet<&<T as Deref>::Target>[src]

Converts from $name<T> or &$name<T> to $name<&T::Target>.

Leaves the original pair in-place, creating a new one with a reference to the original one, additionally coercing the contents via Deref.

Examples

use pair_macro::Pair;

let p = Pair::new(2, 3);
let q = p.as_ref(); // Pair<&i32>
let r = q.as_deref(); // Pair<&i32>, using trait implementation Deref<Target=i32> for &i32
assert_eq!(Pair::new(&2, &3), r);

impl<T: DerefMut> Triplet<T>[src]

pub fn as_deref_mut(&mut self) -> Triplet<&mut <T as Deref>::Target>[src]

Converts from $name<T> or &mut $name<T> to $name<&mut T::Target>.

Leaves the original pair in-place, creating a new one with a mutable reference to the original one, additionally coercing the contents via DerefMut.

Examples

use pair_macro::Pair;

let mut p = Pair::new(2, 3);
let mut q = p.as_mut(); // Pair<&mut i32>
let r = q.as_deref_mut(); // Pair<&mut i32>, using trait implementation DerefMut<Target=i32> for &mut i32
assert_eq!(Pair::new(&mut 2, &mut 3), r);

impl<T: Clone> Triplet<&T>[src]

pub fn cloned(self) -> Triplet<T>[src]

Maps Pair<&T> to Pair<T> by cloning each value.

Examples

use pair_macro::Pair;

let p = Pair::new(2, 3); // Pair<i32>
let q = p.as_ref(); // Pair<&i32>
assert_eq!(p, q.cloned());

impl<T: Clone> Triplet<&mut T>[src]

pub fn cloned(self) -> Triplet<T>[src]

Maps Pair<&mut T> to Pair<T> by cloning each value.

Examples

use pair_macro::Pair;

let mut p = Pair::new(2, 3); // Pair<i32>
let q = p.as_mut(); // Pair<&mut i32>
let cloned = q.cloned();
assert_eq!(p, cloned);

impl<T: Copy> Triplet<&T>[src]

pub fn copied(self) -> Triplet<T>[src]

Maps Pair<&T> to Pair<T> by copying each value.

Examples

use pair_macro::Pair;

let p = Pair::new(2, 3); // Pair<i32>
let q = p.as_ref(); // Pair<&i32>
assert_eq!(p, q.copied());

impl<T: Copy> Triplet<&mut T>[src]

pub fn copied(self) -> Triplet<T>[src]

Maps Pair<&mut T> to Pair<T> by copying each value.

Examples

use pair_macro::Pair;

let mut p = Pair::new(2, 3); // Pair<i32>
let q = p.as_mut(); // Pair<&mut i32>
let copied = q.copied();
assert_eq!(p, copied);

impl<T> Triplet<Option<T>>[src]

pub fn into_option(self) -> Option<Triplet<T>>[src]

Converts from name<Option<T>> to Option<name<T>>.

Returns

Some(pair) if all values of the pair are Some(..), None otherwise.

Examples

use pair_macro::Pair;

let p = Pair::new(Some(1), Some(2)).into_option();
assert_eq!(Some(Pair::new(1, 2)), p);

let q = Pair::new(Some(1), None).into_option();
assert!(q.is_none());

let r = Pair::<Option<i32>>::new(None, None).into_option();
assert!(r.is_none());

impl<T, E> Triplet<Result<T, E>>[src]

pub fn into_result(self) -> Result<Triplet<T>, E>[src]

Converts from name<Result<T, E>> to Result<name<T>, E>.

Returns

Ok(pair) if all values of the pair are Ok(..). Err(e) if any value of the pair is Err(e), where e is the value of the first Err(..) value.

Examples

use pair_macro::Pair;
use core::str::FromStr;

let p = Pair::new("1", "2").map(i32::from_str).into_result();
assert_eq!(Ok(Pair::new(1, 2)), p);

let q = Pair::new("1", "lamy").map(i32::from_str).into_result();
assert!(q.is_err());

let r = Pair::new("yukihana", "lamy").map(i32::from_str).into_result();
assert!(r.is_err());

Trait Implementations

impl<T, U> Add<Triplet<U>> for Triplet<T> where
    T: Add<U>, 
[src]

type Output = Triplet<T::Output>

The resulting type after applying the + operator.

impl<T> AddAssign<Triplet<T>> for Triplet<T> where
    T: AddAssign
[src]

impl<T: Clone> Clone for Triplet<T>[src]

impl<T: Copy> Copy for Triplet<T>[src]

impl<T: Debug> Debug for Triplet<T>[src]

impl<T: Default> Default for Triplet<T>[src]

impl<T> Display for Triplet<T> where
    T: Display
[src]

impl<T, U> Div<U> for Triplet<T> where
    T: Div<U>,
    U: Copy
[src]

type Output = Triplet<T::Output>

The resulting type after applying the / operator.

impl<T, U> DivAssign<U> for Triplet<T> where
    T: DivAssign<U>,
    U: Copy
[src]

impl<T: Eq> Eq for Triplet<T>[src]

impl<T: Hash> Hash for Triplet<T>[src]

impl<T, U> Mul<U> for Triplet<T> where
    T: Mul<U>,
    U: Copy
[src]

type Output = Triplet<T::Output>

The resulting type after applying the * operator.

impl<T, U> MulAssign<U> for Triplet<T> where
    T: MulAssign<U>,
    U: Copy
[src]

impl<T> Neg for Triplet<T> where
    T: Neg
[src]

type Output = Triplet<T::Output>

The resulting type after applying the - operator.

impl<T: PartialEq> PartialEq<Triplet<T>> for Triplet<T>[src]

impl<T, U> Rem<U> for Triplet<T> where
    T: Rem<U>,
    U: Copy
[src]

type Output = Triplet<T::Output>

The resulting type after applying the % operator.

impl<T, U> RemAssign<U> for Triplet<T> where
    T: RemAssign<U>,
    U: Copy
[src]

impl<T> StructuralEq for Triplet<T>[src]

impl<T> StructuralPartialEq for Triplet<T>[src]

impl<T, U> Sub<Triplet<U>> for Triplet<T> where
    T: Sub<U>, 
[src]

type Output = Triplet<T::Output>

The resulting type after applying the - operator.

impl<T> SubAssign<Triplet<T>> for Triplet<T> where
    T: SubAssign
[src]

Auto Trait Implementations

impl<T> Send for Triplet<T> where
    T: Send
[src]

impl<T> Sync for Triplet<T> where
    T: Sync
[src]

impl<T> Unpin for Triplet<T> where
    T: Unpin
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.