1 #if !defined(__RingBuffer_hdr__)
2 #define __RingBuffer_hdr__
15 m_iBuffLength(iBufferLengthInSamples),
20 assert(iBufferLengthInSamples > 0);
22 m_ptBuff =
new T [m_iBuffLength];
49 put(ptNewBuff, iLength);
50 incIdx(m_iWriteIdx, iLength);
59 m_ptBuff[m_iWriteIdx] = tNewValue;
67 void put(
const T* ptNewBuff,
int iLength)
69 assert(iLength <= m_iBuffLength && iLength >= 0);
72 int iNumValues2End = std::min(iLength,m_iBuffLength - m_iWriteIdx);
74 memcpy (&m_ptBuff[m_iWriteIdx], ptNewBuff,
sizeof(T)*iNumValues2End);
75 if ((iLength - iNumValues2End)>0)
76 memcpy (m_ptBuff, &ptNewBuff[iNumValues2End],
sizeof(T)*(iLength - iNumValues2End));
97 incIdx(m_iReadIdx, iLength);
104 T
get (
float fOffset = 0)
const
107 return m_ptBuff[m_iReadIdx];
112 int iOffset =
static_cast<int>(std::floor(fOffset));
113 float fFrac = fOffset - iOffset;
114 int iRead = m_iReadIdx + iOffset;
115 while (iRead > m_iBuffLength-1)
116 iRead -= m_iBuffLength;
118 iRead += m_iBuffLength;
120 return (1-fFrac) * m_ptBuff[iRead] +
121 fFrac * m_ptBuff[(iRead+1) % m_iBuffLength];
130 void get (T* ptBuff,
int iLength)
const
132 assert(iLength <= m_iBuffLength && iLength >= 0);
135 int iNumValues2End = std::min(iLength, m_iBuffLength - m_iReadIdx);
137 memcpy (ptBuff, &m_ptBuff[m_iReadIdx],
sizeof(T)*iNumValues2End);
138 if ((iLength - iNumValues2End)>0)
139 memcpy (&ptBuff[iNumValues2End], m_ptBuff,
sizeof(T)*(iLength - iNumValues2End));
147 memset (m_ptBuff, 0,
sizeof(T)*m_iBuffLength);
166 incIdx(m_iWriteIdx, iNewWriteIdx - m_iWriteIdx);
183 incIdx(m_iReadIdx, iNewReadIdx - m_iReadIdx);
191 return (m_iWriteIdx - m_iReadIdx + m_iBuffLength)%m_iBuffLength;
199 return m_iBuffLength;
205 void incIdx (
int &iIdx,
int iOffset = 1)
207 while ((iIdx + iOffset) < 0)
210 iOffset += m_iBuffLength;
212 iIdx = (iIdx + iOffset) % m_iBuffLength;
221 #endif // __RingBuffer_hdr__