From 33c8dba5048d3e4d9c54518a19277e28bf7491fe Mon Sep 17 00:00:00 2001 From: Andrew Smith <andrewchristophersmith@gmail.com> Date: Mon, 28 Aug 2017 10:28:04 -0700 Subject: [PATCH 1/3] Add Self: Sized constraint to by_ref --- src/signal.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/signal.rs b/src/signal.rs index 404c3dc9..8df97215 100644 --- a/src/signal.rs +++ b/src/signal.rs @@ -482,7 +482,9 @@ pub trait Signal { /// assert_eq!(signal.next(), [4]); /// } /// ``` - fn by_ref(&mut self) -> &mut Self { + fn by_ref(&mut self) -> &mut Self + where Self: Sized + { self } } From e7e7c73eceff79ca51d774499b17daad78b7d910 Mon Sep 17 00:00:00 2001 From: Andrew Smith <andrewchristophersmith@gmail.com> Date: Mon, 28 Aug 2017 17:12:08 -0700 Subject: [PATCH 2/3] impl Signal for Box<Signal> --- src/signal.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/signal.rs b/src/signal.rs index 404c3dc9..bca50a39 100644 --- a/src/signal.rs +++ b/src/signal.rs @@ -1042,6 +1042,16 @@ pub fn noise_simplex<S>(phase: Phase<S>) -> NoiseSimplex<S> { //// Trait Implementations for Signal Types. +impl<F> Signal for Box<Signal<Frame=F>> + where F: Frame +{ + type Frame = F; + #[inline] + fn next(&mut self) -> Self::Frame { + use core::ops::DerefMut; + self.deref_mut().next() + } +} impl<I> Signal for FromIterator<I> where I: Iterator, From dac9431630085a3a8de716b28a34fb7effe7b0bd Mon Sep 17 00:00:00 2001 From: Andrew Smith <andrewchristophersmith@gmail.com> Date: Fri, 1 Sep 2017 07:30:18 -0700 Subject: [PATCH 3/3] Use Box from core --- src/signal.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/signal.rs b/src/signal.rs index 9422628d..52359fa7 100644 --- a/src/signal.rs +++ b/src/signal.rs @@ -20,7 +20,7 @@ //! Working with **Signal**s allows for easy, readable creation of rich and complex DSP graphs with //! a simple and familiar API. -use {BTreeMap, Duplex, Frame, Sample, Rc, VecDeque}; +use {BTreeMap, Duplex, Frame, Sample, Rc, VecDeque, Box}; use interpolate::{Converter, Interpolator}; use core;