Skip to main content

ShapeExtent

Enum ShapeExtent 

Source
pub enum ShapeExtent<D> {
    Exact(D),
    UpperBound(D),
    Unknown,
}
Expand description

A dimension expression plus the guarantee it provides.

Exact means the expression is the runtime size. UpperBound means the runtime size is no larger than the expression. Unknown preserves rank when no useful bound is available.

§Examples

use tenferro_ops::shape_extent::ShapeExtent;

let extent = ShapeExtent::exact(4usize);
assert_eq!(extent.as_exact(), Some(&4));

Variants§

§

Exact(D)

The dimension expression is exact.

§

UpperBound(D)

The dimension expression is an upper bound.

§

Unknown

The dimension is rank-known but otherwise unknown.

Implementations§

Source§

impl<D> ShapeExtent<D>

Source

pub fn exact(dim: D) -> Self

Construct an exact extent.

§Examples
use tenferro_ops::shape_extent::ShapeExtent;

let extent = ShapeExtent::exact(3usize);
assert!(extent.is_exact());
Source

pub fn upper_bound(dim: D) -> Self

Construct an upper-bound extent.

§Examples
use tenferro_ops::shape_extent::ShapeExtent;

let extent = ShapeExtent::upper_bound(3usize);
assert!(!extent.is_exact());
Source

pub fn unknown() -> Self

Construct an unknown extent.

§Examples
use tenferro_ops::shape_extent::ShapeExtent;

let extent: ShapeExtent<usize> = ShapeExtent::unknown();
assert_eq!(extent.bound_expr(), None);
Source

pub fn is_exact(&self) -> bool

Return true when this extent is exact.

§Examples
use tenferro_ops::shape_extent::ShapeExtent;

assert!(ShapeExtent::exact(2usize).is_exact());
assert!(!ShapeExtent::upper_bound(2usize).is_exact());
Source

pub fn as_exact(&self) -> Option<&D>

Return the exact dimension expression, if this extent is exact.

§Examples
use tenferro_ops::shape_extent::ShapeExtent;

assert_eq!(ShapeExtent::exact(5usize).as_exact(), Some(&5));
assert_eq!(ShapeExtent::upper_bound(5usize).as_exact(), None);
Source

pub fn bound_expr(&self) -> Option<&D>

Return the known bound expression, if any.

§Examples
use tenferro_ops::shape_extent::ShapeExtent;

assert_eq!(ShapeExtent::upper_bound(5usize).bound_expr(), Some(&5));
Source

pub fn map<E>(self, f: impl FnOnce(D) -> E) -> ShapeExtent<E>

Map the contained dimension expression while preserving exactness.

§Examples
use tenferro_ops::shape_extent::ShapeExtent;

let extent = ShapeExtent::upper_bound(5usize).map(|dim| dim + 1);
assert_eq!(extent.bound_expr(), Some(&6));

Trait Implementations§

Source§

impl<D: Clone> Clone for ShapeExtent<D>

Source§

fn clone(&self) -> ShapeExtent<D>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<D: Debug> Debug for ShapeExtent<D>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<D: Hash> Hash for ShapeExtent<D>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<D: PartialEq> PartialEq for ShapeExtent<D>

Source§

fn eq(&self, other: &ShapeExtent<D>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<D: Eq> Eq for ShapeExtent<D>

Source§

impl<D> StructuralPartialEq for ShapeExtent<D>

Auto Trait Implementations§

§

impl<D> Freeze for ShapeExtent<D>
where D: Freeze,

§

impl<D> RefUnwindSafe for ShapeExtent<D>
where D: RefUnwindSafe,

§

impl<D> Send for ShapeExtent<D>
where D: Send,

§

impl<D> Sync for ShapeExtent<D>
where D: Sync,

§

impl<D> Unpin for ShapeExtent<D>
where D: Unpin,

§

impl<D> UnsafeUnpin for ShapeExtent<D>
where D: UnsafeUnpin,

§

impl<D> UnwindSafe for ShapeExtent<D>
where D: 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.