pub trait Expression: Send {
type Element: Send;
type Values: Iterator<Item=Self::Element> + DoubleEndedIterator;
type Rev: Expression<Element=Self::Element>;
fn length(&self) -> Length;
fn values(self) -> Self::Values;
fn split(self, round_up: bool) -> (Self, Self);
fn rev(self) -> Self::Rev;
fn sum<T>(self) -> Self::Element where Self: Sized + Expression<Element=T>, T: Zero + Add<T, Output=T> { ... }
fn max(self) -> Max::Output where Self: Sized, Max: Reduce<Self::Element> { ... }
fn min(self) -> Min::Output where Self: Sized, Min: Reduce<Self::Element> { ... }
fn zip<E2: Expression>(self, e: E2) -> Zip<Self, E2> where Self: Sized { ... }
fn map<O, F: FnMut(Self::Element) -> O>(self, f: F) -> Map<Self, F> where Self: Sized { ... }
fn switch<T, E>(self, then: T, else_: E) -> Switch<Self, T, E> where Self: Sized + Expression<Element=bool>, T: Expression, E: Expression<Element=T::Element> { ... }
fn eq<E>(self, other: E) -> Eq<Self, E> where Self: Sized, E: Expression, Self::Element: PartialEq<E::Element> { ... }
fn ne<E>(self, other: E) -> Ne<Self, E> where Self: Sized, E: Expression, Self::Element: PartialEq<E::Element> { ... }
fn lt<E>(self, other: E) -> Lt<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element> { ... }
fn le<E>(self, other: E) -> Le<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element> { ... }
fn gt<E>(self, other: E) -> Gt<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element> { ... }
fn ge<E>(self, other: E) -> Ge<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element> { ... }
}
Associated Types
Required Methods
Provided Methods
fn sum<T>(self) -> Self::Element where Self: Sized + Expression<Element=T>, T: Zero + Add<T, Output=T>
fn zip<E2: Expression>(self, e: E2) -> Zip<Self, E2> where Self: Sized
fn map<O, F: FnMut(Self::Element) -> O>(self, f: F) -> Map<Self, F> where Self: Sized
fn switch<T, E>(self, then: T, else_: E) -> Switch<Self, T, E> where Self: Sized + Expression<Element=bool>, T: Expression, E: Expression<Element=T::Element>
fn eq<E>(self, other: E) -> Eq<Self, E> where Self: Sized, E: Expression, Self::Element: PartialEq<E::Element>
fn ne<E>(self, other: E) -> Ne<Self, E> where Self: Sized, E: Expression, Self::Element: PartialEq<E::Element>
fn lt<E>(self, other: E) -> Lt<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element>
fn le<E>(self, other: E) -> Le<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element>
fn gt<E>(self, other: E) -> Gt<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element>
fn ge<E>(self, other: E) -> Ge<Self, E> where Self: Sized, E: Expression, Self::Element: PartialOrd<E::Element>
Implementors
impl<X> Expression for Not<X> where X: Expression, X::Element: Not + Clone + Send, X::Element::Output: Send
impl<X> Expression for Neg<X> where X: Expression, X::Element: Neg + Clone + Send, X::Element::Output: Send
impl<X, Y> Expression for Add<X, Y> where X: Expression, Y: Expression, X::Element: Add<Y::Element> + Clone, Y::Element: Clone, Plus::Output: Send
impl<X, Y> Expression for Sub<X, Y> where X: Expression, Y: Expression, X::Element: Sub<Y::Element> + Clone, Y::Element: Clone, Minus::Output: Send
impl<X, Y> Expression for Mul<X, Y> where X: Expression, Y: Expression, X::Element: Mul<Y::Element> + Clone, Y::Element: Clone, Times::Output: Send
impl<X, Y> Expression for Div<X, Y> where X: Expression, Y: Expression, X::Element: Div<Y::Element> + Clone, Y::Element: Clone, Divide::Output: Send
impl<X, Y> Expression for BitOr<X, Y> where X: Expression, Y: Expression, X::Element: BitOr<Y::Element> + Clone, Y::Element: Clone, Pipe::Output: Send
impl<X, Y> Expression for BitAnd<X, Y> where X: Expression, Y: Expression, X::Element: BitAnd<Y::Element> + Clone, Y::Element: Clone, Ampersand::Output: Send
impl<X, Y> Expression for BitXor<X, Y> where X: Expression, Y: Expression, X::Element: BitXor<Y::Element> + Clone, Y::Element: Clone, Caret::Output: Send
impl<X, Y> Expression for Eq<X, Y> where X: Expression, Y: Expression, X::Element: PartialEq<Y::Element> + Clone, Y::Element: Clone, EqEq::Output: Send
impl<X, Y> Expression for Ne<X, Y> where X: Expression, Y: Expression, X::Element: PartialEq<Y::Element> + Clone, Y::Element: Clone, BangEq::Output: Send
impl<X, Y> Expression for Lt<X, Y> where X: Expression, Y: Expression, X::Element: PartialOrd<Y::Element> + Clone, Y::Element: Clone, LessThan::Output: Send
impl<X, Y> Expression for Le<X, Y> where X: Expression, Y: Expression, X::Element: PartialOrd<Y::Element> + Clone, Y::Element: Clone, LessThanEq::Output: Send
impl<X, Y> Expression for Gt<X, Y> where X: Expression, Y: Expression, X::Element: PartialOrd<Y::Element> + Clone, Y::Element: Clone, GreaterThan::Output: Send
impl<X, Y> Expression for Ge<X, Y> where X: Expression, Y: Expression, X::Element: PartialOrd<Y::Element> + Clone, Y::Element: Clone, GreaterThanEq::Output: Send
impl<X: Expression, Y: Expression> Expression for Zip<X, Y>
impl<X: Expression, O: Send, F: Clone + FnMut(X::Element) -> O + Send> Expression for Map<X, F>
impl<'a, T: 'a + Send + Clone> Expression for Constant<T>
impl<X: Expression> Expression for E<X>
impl<'a, T: 'a + Sync + Send + Clone> Expression for &'a [T]
impl<'a, T: 'a + Send> Expression for &'a mut [T]
impl<B, T, E> Expression for Switch<B, T, E> where B: Expression<Element=bool>, T: Expression, E: Expression<Element=T::Element>
impl<T: Expression> Expression for Rev<T>