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;