pub struct ChunkedUnevenCore<T> {
pub times: Vec<f32>,
pub values: Vec<T>,
}Expand description
The data core of a curve using uneven samples (i.e. keyframes), where each sample time yields some fixed number of values — the sampling width. This may serve as storage for curves that yield vectors or iterators, and in some cases, it may be useful for cache locality if the sample type can effectively be encoded as a fixed-length slice of values.
Fields§
§times: Vec<f32>The times, one for each sample.
§Invariants
This must always have a length of at least 2, be sorted, and have no duplicated or non-finite times.
values: Vec<T>The values that are used in sampling. Each width-worth of these correspond to a single sample.
§Invariants
The length of this vector must always be some fixed integer multiple of that of times.
Implementations§
Source§impl<T> ChunkedUnevenCore<T>
impl<T> ChunkedUnevenCore<T>
Sourcepub fn new(
times: impl IntoIterator<Item = f32>,
values: impl IntoIterator<Item = T>,
width: usize,
) -> Result<Self, ChunkedUnevenCoreError>
pub fn new( times: impl IntoIterator<Item = f32>, values: impl IntoIterator<Item = T>, width: usize, ) -> Result<Self, ChunkedUnevenCoreError>
Create a new ChunkedUnevenCore. The given times are sorted, filtered to finite times,
and deduplicated. See the type-level documentation for more information about this type.
Produces an error in any of the following circumstances:
widthis zero.timeshas less than2unique valid entries.valueshas the incorrect length relative totimes.
Sourcepub fn new_width_inferred(
times: impl IntoIterator<Item = f32>,
values: impl IntoIterator<Item = T>,
) -> Result<Self, ChunkedUnevenCoreError>
pub fn new_width_inferred( times: impl IntoIterator<Item = f32>, values: impl IntoIterator<Item = T>, ) -> Result<Self, ChunkedUnevenCoreError>
Create a new ChunkedUnevenCore, inferring the width from the sizes of the inputs.
The given times are sorted, filtered to finite times, and deduplicated. See the
type-level documentation for more information about this type. Prefer using new
if possible, since that constructor has richer error checking.
Produces an error in any of the following circumstances:
valueshas length zero.timeshas less than2unique valid entries.- The length of
valuesis not divisible by that oftimes(once sorted, filtered, and deduplicated).
The width is implicitly taken to be the length of values divided by that of times
(once sorted, filtered, and deduplicated).
Sourcepub fn domain(&self) -> Interval
pub fn domain(&self) -> Interval
The domain of the curve derived from this core.
§Panics
This may panic if this type’s invariants aren’t met.
Sourcepub const fn width(&self) -> usize
pub const fn width(&self) -> usize
The sample width: the number of values that are contained in each sample.
Sourcepub fn sample_interp(&self, t: f32) -> InterpolationDatum<&[T]>
pub fn sample_interp(&self, t: f32) -> InterpolationDatum<&[T]>
Given a time t, obtain a InterpolationDatum which governs how interpolation might recover
a sample at time t. For example, when a Between value is returned, its contents can
be used to interpolate between the two contained values with the given parameter. The other
variants give additional context about where the value is relative to the family of samples.
Sourcepub fn sample_interp_timed(&self, t: f32) -> InterpolationDatum<(f32, &[T])>
pub fn sample_interp_timed(&self, t: f32) -> InterpolationDatum<(f32, &[T])>
Like sample_interp, but the returned values include the sample times. This can be
useful when sample interpolation is not scale-invariant.
Trait Implementations§
Source§impl<T: Clone> Clone for ChunkedUnevenCore<T>
impl<T: Clone> Clone for ChunkedUnevenCore<T>
Source§fn clone(&self) -> ChunkedUnevenCore<T>
fn clone(&self) -> ChunkedUnevenCore<T>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T: Debug> Debug for ChunkedUnevenCore<T>
impl<T: Debug> Debug for ChunkedUnevenCore<T>
Source§impl<'de, T> Deserialize<'de> for ChunkedUnevenCore<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for ChunkedUnevenCore<T>where
T: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl<T> Freeze for ChunkedUnevenCore<T>
impl<T> RefUnwindSafe for ChunkedUnevenCore<T>where
T: RefUnwindSafe,
impl<T> Send for ChunkedUnevenCore<T>where
T: Send,
impl<T> Sync for ChunkedUnevenCore<T>where
T: Sync,
impl<T> Unpin for ChunkedUnevenCore<T>where
T: Unpin,
impl<T> UnsafeUnpin for ChunkedUnevenCore<T>
impl<T> UnwindSafe for ChunkedUnevenCore<T>where
T: 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
Source§impl<T> TypeData for T
impl<T> TypeData for T
Source§fn clone_type_data(&self) -> Box<dyn TypeData>
fn clone_type_data(&self) -> Box<dyn TypeData>
self.