feat(core): add an AnySignal trait for trait objects and downcasting of signals

This commit is contained in:
Anand Balakrishnan 2023-04-16 17:16:10 -07:00
parent aa952c3151
commit a3d406f2b3
No known key found for this signature in database
2 changed files with 16 additions and 0 deletions

View file

@ -25,6 +25,7 @@ pub use cmp_ops::*;
use itertools::Itertools; use itertools::Itertools;
pub use num_ops::*; pub use num_ops::*;
use num_traits::NumCast; use num_traits::NumCast;
pub use traits::*;
use utils::intersect_bounds; use utils::intersect_bounds;
use self::traits::LinearInterpolatable; use self::traits::LinearInterpolatable;

View file

@ -1,3 +1,4 @@
use std::any::Any;
use std::cmp::Ordering; use std::cmp::Ordering;
use std::time::Duration; use std::time::Duration;
@ -74,6 +75,20 @@ interpolate_for_num!(u64);
interpolate_for_num!(f32); interpolate_for_num!(f32);
interpolate_for_num!(f64); interpolate_for_num!(f64);
/// Simple trait to be used as a trait object for [`Signal<T>`] types.
///
/// This is mainly for external libraries to use for trait objects and downcasting to
/// concrete [`Signal`] types.
pub trait AnySignal {
fn as_any(&self) -> &dyn Any;
}
impl<T: 'static> AnySignal for Signal<T> {
fn as_any(&self) -> &dyn Any {
self
}
}
macro_rules! impl_signal_cmp { macro_rules! impl_signal_cmp {
($cmp:ident) => { ($cmp:ident) => {
paste! { paste! {