public void Add(float left, float right) { if (m_leftChannel.IsFull) { m_leftChannel.Dequeue(m_scratch.Length); m_rightChannel.Dequeue(m_scratch.Length); m_frameSamples += m_scratch.Length; } m_leftChannel.Enqueue(left); m_rightChannel.Enqueue(right); }
public void GetFrame(ref Color32Bytable buffer) { if (m_framesOut.IsEmpty) { buffer = null; } else { // The writer thread will never touch m_framesOut[0], therefore this should be thread safe. // This is true as long as the writer never calls Enqueue with overwriteIfFull=true. buffer = m_framesOut.Dequeue() as Color32Bytable; } m_frameReady.Set(); }
public void TestDequeue() { RingBuffer <float> r1 = new RingBuffer <float>(3); Assert.IsTrue(r1.Enqueue(1.5f)); Assert.IsTrue(r1.Enqueue(2.5f)); Assert.IsTrue(r1.Enqueue(3.5f)); Assert.IsTrue(r1.IsFull); Assert.IsFalse(r1.IsEmpty); float[] v = new float[3]; Assert.AreEqual(3, r1.Dequeue(ref v)); Assert.AreEqual(0, r1.Count); Assert.IsFalse(r1.IsFull); Assert.IsTrue(r1.IsEmpty); Assert.AreEqual(1.5f, v[0]); Assert.AreEqual(2.5f, v[1]); Assert.AreEqual(3.5f, v[2]); Assert.IsTrue(r1.Enqueue(4.5f)); Assert.IsTrue(r1.Enqueue(5.5f)); Assert.IsTrue(r1.Enqueue(6.5f)); Assert.IsTrue(r1.IsFull); Assert.IsFalse(r1.IsEmpty); float[] v1 = new float[1]; Assert.AreEqual(1, r1.Dequeue(ref v1)); Assert.AreEqual(2, r1.Count); Assert.AreEqual(4.5f, v1[0]); Assert.AreEqual(1, r1.Dequeue(ref v1)); Assert.AreEqual(1, r1.Count); Assert.AreEqual(5.5f, v1[0]); Assert.AreEqual(1, r1.Dequeue(ref v1)); Assert.AreEqual(0, r1.Count); Assert.AreEqual(6.5f, v1[0]); Assert.IsFalse(r1.IsFull); Assert.IsTrue(r1.IsEmpty); Assert.AreEqual(0, r1.Dequeue(ref v1)); Assert.AreEqual(0, r1.Count); Assert.AreEqual(6.5f, v1[0]); Assert.IsTrue(r1.Enqueue(7.5f, true)); Assert.IsTrue(r1.Enqueue(8.5f, true)); Assert.IsTrue(r1.Enqueue(9.5f, true)); Assert.IsTrue(r1.Enqueue(10.5f, true)); Assert.AreEqual(3, r1.Dequeue(ref v)); Assert.AreEqual(8.5f, v[0]); Assert.AreEqual(9.5f, v[1]); Assert.AreEqual(10.5f, v[2]); }