예제 #1
0
            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);
            }
예제 #2
0
  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();
  }
예제 #3
0
        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]);
        }