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>
impl<D> ShapeExtent<D>
Sourcepub fn exact(dim: D) -> Self
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());Sourcepub fn upper_bound(dim: D) -> Self
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());Sourcepub fn unknown() -> Self
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);Sourcepub fn is_exact(&self) -> bool
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());Sourcepub fn as_exact(&self) -> Option<&D>
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);Sourcepub fn bound_expr(&self) -> Option<&D>
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));Sourcepub fn map<E>(self, f: impl FnOnce(D) -> E) -> ShapeExtent<E>
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>
impl<D: Clone> Clone for ShapeExtent<D>
Source§fn clone(&self) -> ShapeExtent<D>
fn clone(&self) -> ShapeExtent<D>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<D: Debug> Debug for ShapeExtent<D>
impl<D: Debug> Debug for ShapeExtent<D>
Source§impl<D: Hash> Hash for ShapeExtent<D>
impl<D: Hash> Hash for ShapeExtent<D>
Source§impl<D: PartialEq> PartialEq for ShapeExtent<D>
impl<D: PartialEq> PartialEq for ShapeExtent<D>
impl<D: Eq> Eq for ShapeExtent<D>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more