[][src]Struct cursive::XY

pub struct XY<T> {
    pub x: T,
    pub y: T,
}

A generic structure with a value for each axis.

Fields

x: T

X-axis value

y: T

Y-axis value

Implementations

impl XY<Offset>[src]

pub fn center() -> XY<Offset>[src]

Returns a position centered on both axis.

pub fn absolute<T>(offset: T) -> XY<Offset> where
    T: Into<XY<usize>>, 
[src]

Returns a position absolute on both axis.

pub fn parent<T>(offset: T) -> XY<Offset> where
    T: Into<XY<isize>>, 
[src]

Returns a position relative to the parent on both axis.

pub fn compute_offset<S, A, P>(
    &self,
    size: S,
    available: A,
    parent: P
) -> XY<usize> where
    A: Into<XY<usize>>,
    P: Into<XY<usize>>,
    S: Into<XY<usize>>, 
[src]

Computes the offset required to draw a view.

When drawing a view with size in a container with available, and a parent with the absolute coordinates parent, drawing the child with its top-left corner at the returned coordinates will position him appropriately.

impl XY<usize>[src]

pub fn max_value() -> XY<usize>[src]

Returns a Vec2 with usize::max_value() in each axis.

Examples

assert!(Vec2::new(9999, 9999) < Vec2::max_value());

pub fn saturating_sub<O>(&self, other: O) -> XY<usize> where
    O: Into<XY<usize>>, 
[src]

Saturating subtraction. Computes self - other, saturating at 0.

Never panics.

Examples

let u = Vec2::new(1, 2);
let v = Vec2::new(2, 1);
assert_eq!(u.saturating_sub(v), Vec2::new(0, 1));

pub fn saturating_add<O>(&self, other: O) -> XY<usize> where
    O: Into<XY<isize>>, 
[src]

Saturating addition with a signed vec.

Any coordinates saturates to 0.

Examples

let u = Vec2::new(1, 2);
let v = XY::<isize>::new(-2, 1);
assert_eq!(u.saturating_add(v), Vec2::new(0, 3));

pub fn checked_add<O>(&self, other: O) -> Option<XY<usize>> where
    O: Into<XY<isize>>, 
[src]

Checked addition with a signed vec.

Will return None if any coordinates exceeds bounds.

pub fn div_up<O>(&self, other: O) -> XY<usize> where
    O: Into<XY<usize>>, 
[src]

Term-by-term integer division that rounds up.

Examples

let u = Vec2::new(1, 6);
let v = Vec2::new(2, 3);
assert_eq!(u.div_up(v), Vec2::new(1, 2));

pub fn checked_sub<O>(&self, other: O) -> Option<XY<usize>> where
    O: Into<XY<usize>>, 
[src]

Checked subtraction. Computes self - other if possible.

Returns None if self.x < other.x || self.y < other.y.

Never panics.

Examples

let xy = Vec2::new(1, 2);
assert_eq!(xy.checked_sub((1, 1)), Some(Vec2::new(0, 1)));
assert_eq!(xy.checked_sub((2, 2)), None);

pub fn signed(self) -> XY<isize>[src]

Returns a XY<isize> from self.

Examples

let v: XY<isize> = Vec2::new(1, 2).signed().map(|i| i - 5);
assert_eq!(v, XY::new(-4, -3));

let u = Vec2::new(3, 4);
assert_eq!(u.saturating_add(v), Vec2::new(0, 1));

impl<T> XY<T> where
    T: Ord
[src]

pub fn fits_in<O>(&self, other: O) -> bool where
    O: Into<XY<T>>, 
[src]

Returns true if self could fit inside other.

Shortcut for self.x <= other.x && self.y <= other.y.

If this returns true, then other - self will not underflow.

Examples

let v = Vec2::new(1, 2);
assert!(v.fits_in((1, 2)));
assert!(v.fits_in((3, 3)));
assert!(!v.fits_in((2, 1)));

pub fn fits<O>(&self, other: O) -> bool where
    O: Into<XY<T>>, 
[src]

Returns true if other could fit inside self.

Shortcut for self.x >= other.x && self.y >= other.y.

If this returns true, then self - other will not underflow.

Examples

let v = Vec2::new(1, 2);
assert!(v.fits((1, 2)));
assert!(v.fits((0, 0)));
assert!(!v.fits((2, 1)));

pub fn strictly_lt<O>(&self, other: O) -> bool where
    O: Into<XY<T>>, 
[src]

Returns true if other is strictly less than self in each axis.

pub fn strictly_gt<O>(&self, other: O) -> bool where
    O: Into<XY<T>>, 
[src]

Returns true if other is strictly greater than self in each axis.

pub fn max<A, B>(a: A, b: B) -> XY<T> where
    A: Into<XY<T>>,
    B: Into<XY<T>>, 
[src]

Returns a new Vec2 that is a maximum per coordinate.

Examples

assert_eq!(Vec2::max((1, 2), (3, 1)), Vec2::new(3, 2));

pub fn min<A, B>(a: A, b: B) -> XY<T> where
    A: Into<XY<T>>,
    B: Into<XY<T>>, 
[src]

Returns a new Vec2 that is no larger than any input in both dimensions.

Examples

assert_eq!(Vec2::min((1, 2), (3, 1)), Vec2::new(1, 1));

pub fn or_min<O>(self, other: O) -> XY<T> where
    O: Into<XY<T>>, 
[src]

Returns the minimum of self and other.

This is equivalent to Vec2::min(self, other).

pub fn or_max<O>(self, other: O) -> XY<T> where
    O: Into<XY<T>>, 
[src]

Returns the maximum of self and other.

This is equivalent to Vec2::max(self, other).

impl<T> XY<T> where
    T: Clone + Ord + Add<T, Output = T>, 
[src]

#[must_use]pub fn stack_vertical(&self, other: &XY<T>) -> XY<T>[src]

Returns (max(self.x,other.x), self.y+other.y)

#[must_use]pub fn stack_horizontal(&self, other: &XY<T>) -> XY<T>[src]

Returns (self.x+other.x, max(self.y,other.y))

pub fn fits_in_rect<O1, O2>(&self, top_left: O1, size: O2) -> bool where
    O1: Into<XY<T>>,
    O2: Into<XY<T>>, 
[src]

Returns true if self fits in the given rectangle.

impl<T> XY<T> where
    T: Add<T>, 
[src]

pub fn sum(self) -> <T as Add<T>>::Output[src]

Returns self.x + self.y.

impl<T> XY<T> where
    T: Mul<T>, 
[src]

pub fn product(self) -> <T as Mul<T>>::Output[src]

Returns self.x * self.y

impl<T> XY<T> where
    T: Clone + Zero
[src]

pub fn keep_x(&self) -> XY<T>[src]

Returns a vector with the X component of self, and y=0.

Examples

let xy = XY::new(1, 2);
assert_eq!(xy.keep_x(), XY::new(1, 0));

pub fn keep_y(&self) -> XY<T>[src]

Returns a vector with the Y component of self, and x=0.

Examples

let xy = XY::new(1, 2);
assert_eq!(xy.keep_y(), XY::new(0, 2));

pub fn zero() -> XY<T>[src]

Alias for Self::new(0,0).

Examples

assert_eq!(Vec2::zero(), Vec2::new(0, 0));

impl<T> XY<T>[src]

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

Creates a new XY from the given values.

pub fn swap(self) -> XY<T>[src]

Swaps the x and y values.

Examples

let xy = XY::new(1, 2);
assert_eq!(xy.swap(), XY::new(2, 1));

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

Returns f(self.x, self.y)

Examples

let xy = XY::new(1, 2);

assert_eq!(xy.fold(std::ops::Add::add), 3);
assert_eq!(xy.fold(std::ops::Mul::mul), 2);
assert_eq!(xy.fold(|x, y| x < y), true);

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

Creates a new XY by applying f to x and y.

Examples

let xy = XY::new(1, 2);

assert_eq!(xy.map(|v| v * 2), XY::new(2, 4));
assert_eq!(xy.map(|v| v > 1), XY::new(false, true));

pub fn map_if<F>(self, condition: XY<bool>, f: F) -> XY<T> where
    F: Fn(T) -> T, 
[src]

Applies f on axis where condition is true.

Carries over self otherwise.

Examples

let xy = XY::new(1, 2);
let cond = XY::new(true, false);

assert_eq!(xy.map_if(cond, |v| v * 3), XY::new(3, 2));

pub fn run_if<F, U>(self, condition: XY<bool>, f: F) -> XY<Option<U>> where
    F: FnMut(T) -> U, 
[src]

Applies f on axis where condition is true.

Returns None otherwise.

Examples

let xy = XY::new(1, 2);
let cond = XY::new(true, false);

assert_eq!(xy.run_if(cond, |v| v * 3), XY::new(Some(3), None));

pub fn map_x<F>(self, f: F) -> XY<T> where
    F: FnOnce(T) -> T, 
[src]

Creates a new XY by applying f to x, and carrying y over.

Examples

let xy = XY::new(1, 2);
assert_eq!(xy.map_x(|x| x * 10), XY::new(10, 2));

pub fn map_y<F>(self, f: F) -> XY<T> where
    F: FnOnce(T) -> T, 
[src]

Creates a new XY by applying f to y, and carrying x over.

Examples

let xy = XY::new(1, 2);
assert_eq!(xy.map_y(|y| y * 10), XY::new(1, 20));

pub fn pair(self) -> (T, T)[src]

Destructure self into a pair.

Examples

let xy = XY::new(1, 2);
let (x, y) = xy.pair();
assert_eq!((x, y), (1, 2));

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

Returns a XY with references to this one's values.

Examples

fn longer(xy: &XY<String>, l: usize) -> XY<bool> {
    // `XY::map` takes ownership
    // So we need to get a XY<&String> from a &XY<String>
    let by_ref: XY<&String> = xy.as_ref();
    by_ref.map(|s| s.len() > l)
}

let xy = XY::new(String::from("a"), String::from("bbb"));

assert_eq!(longer(&xy, 2), XY::new(false, true));

pub fn as_ref_mut(&mut self) -> XY<&mut T>[src]

Returns a XY with mutable references to this one's values.

pub fn iter(&self) -> Chain<Once<&T>, Once<&T>>[src]

Creates an iterator that returns references to x, then y.

Examples

let xy = XY::new(1, 2);
let vec: Vec<bool> = xy.iter().map(|&i| i > 1).collect();
assert_eq!(vec, vec![false, true]);

pub fn get(&self, o: Orientation) -> &T[src]

Returns a reference to the value on the given axis.

Examples

let xy = XY::new(1, 2);
assert_eq!(xy.get(Orientation::Horizontal), &1);
assert_eq!(xy.get(Orientation::Vertical), &2);

pub fn get_mut(&mut self, o: Orientation) -> &mut T[src]

Returns a mutable reference to the value on the given axis.

Examples

let mut xy = XY::new(1, 2);
*xy.get_mut(Orientation::Horizontal) = 10;

assert_eq!(xy, XY::new(10, 2));

pub fn zip<U>(self, other: XY<U>) -> XY<(T, U)>[src]

Returns a new XY of tuples made by zipping self and other.

Examples

let a = XY::new(1, 2);
let b = XY::new(true, false);
assert_eq!(a.zip(b), XY::new((1, true), (2, false)));

pub fn zip3<U, V>(self, a: XY<U>, b: XY<V>) -> XY<(T, U, V)>[src]

Returns a new XY of tuples made by zipping self, a and b.

Examples

let a = XY::new(1, 2);
let b = XY::new(true, false);
let c = XY::new("x", "y");
assert_eq!(a.zip3(b, c), XY::new((1, true, "x"), (2, false, "y")));

pub fn zip4<U, V, W>(self, a: XY<U>, b: XY<V>, c: XY<W>) -> XY<(T, U, V, W)>[src]

Returns a new XY of tuples made by zipping self, a, b and c.

Examples

let a = XY::new(1, 2);
let b = XY::new(true, false);
let c = XY::new("x", "y");
let d = XY::new(vec![1], vec![2, 3, 4]);
assert_eq!(
    XY::zip4(a, b, c, d),
    XY::new((1, true, "x", vec![1]), (2, false, "y", vec![2, 3, 4]))
);

pub fn zip5<U, V, W, Z>(
    self,
    a: XY<U>,
    b: XY<V>,
    c: XY<W>,
    d: XY<Z>
) -> XY<(T, U, V, W, Z)>
[src]

Returns a new XY of tuples made by zipping self, a, b, c and d.

Examples

let a = XY::new(1, 2);
let b = XY::new(true, false);
let c = XY::new("x", "y");
let d = XY::new(vec![1], vec![2, 3, 4]);
let e = XY::new('a', 'b');

let xy: XY<Option<char>> =
    XY::zip5(a, b, c, d, e).map(|(a, b, c, d, e)| {
        if b && d.contains(&a) {
            Some(e)
        } else {
            c.chars().next()
        }
    });
assert_eq!(xy, XY::new(Some('a'), Some('y')));

pub fn zip_map<U, V, F>(self, other: XY<U>, f: F) -> XY<V> where
    F: FnMut(T, U) -> V, 
[src]

Returns a new XY by calling f on self and other for each axis.

Examples

let a = XY::new((1, 10), (2, 20));
let b = XY::new(true, false);
let xy = a.zip_map(b, |(a1, a2), b| if b { a1 } else { a2 });
assert_eq!(xy, XY::new(1, 20));

pub fn keep(self, keep: XY<bool>) -> XY<Option<T>>[src]

For each axis, keep the element from self if keep is true.

Examples

let xy = XY::new(1, 2);
let cond = XY::new(true, false);

assert_eq!(xy.keep(cond), XY::new(Some(1), None));

impl<T> XY<T> where
    T: Clone
[src]

pub fn with_axis(&self, o: Orientation, value: T) -> XY<T>[src]

Returns a new XY with the axis o set to value.

Examples

let xy = XY::new(1, 2).with_axis(Orientation::Horizontal, 42);

assert_eq!(xy, XY::new(42, 2));

pub fn with_axis_from(&self, o: Orientation, other: &XY<T>) -> XY<T>[src]

Returns a new XY with the axis o set to the value from other.

Examples

let other = XY::new(3, 4);
let xy = XY::new(1, 2).with_axis_from(Orientation::Horizontal, &other);

assert_eq!(xy, XY::new(3, 2));

pub fn set_axis_from(&mut self, o: Orientation, other: &XY<T>)[src]

Sets the axis o on self to the value from other.

Examples

let mut xy = XY::new(1, 2);
let other = XY::new(3, 4);
xy.set_axis_from(Orientation::Horizontal, &other);

assert_eq!(xy, XY::new(3, 2));

pub fn both_from(value: T) -> XY<T>[src]

Creates a XY with both x and y set to value.

Examples

let xy = XY::both_from(42);

assert_eq!(xy, XY::new(42, 42));

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

pub fn unwrap_or(self, other: XY<T>) -> XY<T>[src]

Returns a new XY by calling unwrap_or on each axis.

Examples

let xy = XY::new(Some(1), None);
assert_eq!(xy.unwrap_or(XY::new(10, 20)), XY::new(1, 20));

pub fn both(self) -> Option<XY<T>>[src]

Returns a new XY if both components are present in self.

Examples

assert_eq!(XY::new(Some(1), None).both(), None);
assert_eq!(XY::new(Some(1), Some(2)).both(), Some(XY::new(1, 2)));

impl XY<bool>[src]

pub fn any(self) -> bool[src]

Returns true if any of x or y is true.

Examples

assert_eq!(XY::new(true, false).any(), true);
assert_eq!(XY::new(false, false).any(), false);
assert_eq!(XY::new('a', 'b').map(|c| c == 'a').any(), true);

pub fn both(self) -> bool[src]

Returns true if both x and y are true.

Examples

assert_eq!(XY::new(true, false).both(), false);
assert_eq!(XY::new(true, true).both(), true);
assert_eq!(XY::new("abc", "de").map(|s| s.len() > 2).both(), false);

pub fn select<T>(self, other: XY<T>) -> XY<Option<T>>[src]

For each axis, keeps elements from other if self is true.

Examples

let choice = XY::new(true, false);
let values = XY::new(1, 2);
let selection = choice.select(values);

assert_eq!(selection, XY::new(Some(1), None));

pub fn select_or<T>(self, if_true: XY<T>, if_false: XY<T>) -> XY<T>[src]

For each axis, selects if_true if self is true, else if_false.

Examples

let choice = XY::new(true, false);
let values = XY::new(1, 2);
let fallback = XY::new(3, 4);
let selection = choice.select_or(values, fallback);

assert_eq!(selection, XY::new(1, 4));

pub fn and(self, other: XY<bool>) -> XY<bool>[src]

Returns a term-by-term AND operation.

Examples

let a = XY::new(true, false);
let b = XY::new(true, true);
assert_eq!(a.and(b), XY::new(true, false));

pub fn or(self, other: XY<bool>) -> XY<bool>[src]

Returns a term-by-term OR operation.

Examples

let a = XY::new(true, false);
let b = XY::new(true, true);
assert_eq!(a.or(b), XY::new(true, true));

Trait Implementations

impl<T, O> Add<O> for XY<T> where
    O: Into<XY<T>>,
    T: Add<T, Output = T>, 
[src]

type Output = XY<T>

The resulting type after applying the + operator.

pub fn add(self, other: O) -> XY<T>[src]

Examples

let xy = XY::new(1, 2);
assert_eq!(xy + (2, 3), XY::new(3, 5));

impl<T> Clone for XY<T> where
    T: Clone
[src]

impl<T> Copy for XY<T> where
    T: Copy
[src]

impl<T> Debug for XY<T> where
    T: Debug
[src]

impl<T> Default for XY<T> where
    T: Default
[src]

impl<T> Div<T> for XY<T> where
    T: Clone + Div<T, Output = T>, 
[src]

type Output = XY<T>

The resulting type after applying the / operator.

pub fn div(self, other: T) -> XY<T>[src]

Examples

let xy = XY::new(1, 4);
assert_eq!(xy / 2, XY::new(0, 2));

impl<T> Div<XY<T>> for XY<T> where
    T: Div<T>, 
[src]

type Output = XY<<T as Div<T>>::Output>

The resulting type after applying the / operator.

pub fn div(self, other: XY<T>) -> <XY<T> as Div<XY<T>>>::Output[src]

Examples

let u = XY::new(2, 3);
let v = XY::new(1, 2);
assert_eq!(u / v, XY::new(2, 1));

impl<T> Eq for XY<T> where
    T: Eq
[src]

impl<'a, T> From<&'a XY<T>> for XY<T> where
    T: Clone
[src]

pub fn from(t: &'a XY<T>) -> XY<T>[src]

Clone a XY

Examples

let xy = XY::new(String::from("a"), String::from("ab"));
assert_eq!(XY::from(&xy), xy);

impl<T> From<(T, T)> for XY<T>[src]

pub fn from((T, T)) -> XY<T>[src]

A pair is assumed to be (x, y)

impl<T, U> From<(XY<T>, XY<U>)> for XY<(T, U)>[src]

pub fn from((XY<T>, XY<U>)) -> XY<(T, U)>[src]

Easily zip a pair of XY into a XY of pair

impl From<(i32, i32)> for XY<usize>[src]

pub fn from((i32, i32)) -> XY<usize>[src]

Examples

let xy: XY<isize> = XY::from((-1i32, -2i32));
assert_eq!(xy, XY::new(-1, -2));

impl From<(u16, u16)> for XY<usize>[src]

pub fn from((u16, u16)) -> XY<usize>[src]

Examples

let v = Vec2::from((1u16, 2u16));
assert_eq!(v, Vec2::new(1, 2));

impl From<(u32, u32)> for XY<usize>[src]

pub fn from((u32, u32)) -> XY<usize>[src]

Examples

let v = Vec2::from((1u32, 2u32));
assert_eq!(v, Vec2::new(1, 2));

impl From<(u8, u8)> for XY<usize>[src]

pub fn from((u8, u8)) -> XY<usize>[src]

Examples

let v = Vec2::from((1u8, 2u8));
assert_eq!(v, Vec2::new(1, 2));

impl<T> From<T> for XY<isize> where
    T: Into<XY<usize>>, 
[src]

pub fn from(t: T) -> XY<isize>[src]

Examples

let u = Vec2::new(1, 2);
let v: XY<isize> = XY::from(u);
assert_eq!(v, XY::new(1, 2));

impl<T> Hash for XY<T> where
    T: Hash
[src]

impl Index<XY<usize>> for dyn ObservedPieceInterface[src]

type Output = Option<ObservedCell>

The returned type after indexing.

impl Index<XY<usize>> for ObservedScreen[src]

type Output = Option<ObservedCell>

The returned type after indexing.

impl IndexMut<XY<usize>> for ObservedScreen[src]

impl<T> IntoIterator for XY<T>[src]

type Item = T

The type of the elements being iterated over.

type IntoIter = Chain<Once<T>, Once<T>>

Which kind of iterator are we turning this into?

pub fn into_iter(self) -> <XY<T> as IntoIterator>::IntoIter[src]

Iterate over x, then y.

impl<T> Mul<XY<T>> for XY<T> where
    T: Mul<T>, 
[src]

type Output = XY<<T as Mul<T>>::Output>

The resulting type after applying the * operator.

pub fn mul(self, other: XY<T>) -> <XY<T> as Mul<XY<T>>>::Output[src]

Examples

let u = XY::new(1, 2);
let v = XY::new(2, 3);
assert_eq!(u * v, XY::new(2, 6));

impl Mul<usize> for XY<usize>[src]

type Output = XY<usize>

The resulting type after applying the * operator.

pub fn mul(self, other: usize) -> XY<usize>[src]

Examples

let v = Vec2::new(1, 2);
assert_eq!(v * 2, Vec2::new(2, 4));

impl<T> PartialEq<XY<T>> for XY<T> where
    T: PartialEq<T>, 
[src]

impl<T> PartialOrd<XY<T>> for XY<T> where
    T: PartialOrd<T>, 
[src]

pub fn partial_cmp(&self, other: &XY<T>) -> Option<Ordering>[src]

a < b <=> a.x < b.x && a.y < b.y

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

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

impl<T, O> Sub<O> for XY<T> where
    O: Into<XY<T>>,
    T: Sub<T, Output = T>, 
[src]

type Output = XY<T>

The resulting type after applying the - operator.

pub fn sub(self, other: O) -> XY<T>[src]

Examples

let xy = XY::new(1, 2);
assert_eq!(xy - (1, 0), XY::new(0, 2));

Auto Trait Implementations

impl<T> RefUnwindSafe for XY<T> where
    T: RefUnwindSafe
[src]

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

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

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

impl<T> UnwindSafe for XY<T> where
    T: UnwindSafe
[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> CallHasher for T where
    T: Hash + ?Sized
[src]

impl<T> Erased for T

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

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

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

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.

impl<T> With for T[src]