- refactored
- BufferMulti numChannels is template parameter
This commit is contained in:
+19
-51
@@ -27,23 +27,22 @@
|
||||
#define DSP_BUFFER_MULTI_H
|
||||
|
||||
#include "buffer.hpp"
|
||||
#include <array>
|
||||
|
||||
namespace dsp {
|
||||
|
||||
template <typename T>
|
||||
template <typename T, uint numCh>
|
||||
class BufferMulti
|
||||
{
|
||||
Buffer<T> *m_buffer;
|
||||
uint m_numChannels;
|
||||
size_t m_capacity;
|
||||
|
||||
public:
|
||||
BufferMulti(size_t numChannels, size_t capacity)
|
||||
: m_buffer(new Buffer<T>[numChannels])
|
||||
, m_numChannels(numChannels)
|
||||
BufferMulti(size_t capacity)
|
||||
: m_buffer(new Buffer<T>[numCh])
|
||||
, m_capacity(capacity)
|
||||
{
|
||||
for (int c=0; c < numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
m_buffer[c].resize(capacity);
|
||||
}
|
||||
@@ -56,7 +55,7 @@ class BufferMulti
|
||||
|
||||
void reset()
|
||||
{
|
||||
for (int c=0; c < m_numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
m_buffer[c].reset();
|
||||
}
|
||||
@@ -69,7 +68,7 @@ class BufferMulti
|
||||
|
||||
size_t numChannels()
|
||||
{
|
||||
return m_numChannels;
|
||||
return numCh;
|
||||
}
|
||||
|
||||
Buffer<T> operator[](uint channel)
|
||||
@@ -84,7 +83,7 @@ class BufferMulti
|
||||
|
||||
BufferMulti & operator ++()
|
||||
{
|
||||
for (int c=0; c < m_numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
++(m_buffer[c]);
|
||||
}
|
||||
@@ -93,7 +92,7 @@ class BufferMulti
|
||||
|
||||
BufferMulti & operator +=(int i)
|
||||
{
|
||||
for (int c=0; c < m_numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
m_buffer[c] += i;
|
||||
}
|
||||
@@ -102,7 +101,7 @@ class BufferMulti
|
||||
|
||||
BufferMulti & operator --()
|
||||
{
|
||||
for (int c=0; c < m_numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
--(m_buffer[c]);
|
||||
}
|
||||
@@ -111,68 +110,37 @@ class BufferMulti
|
||||
|
||||
BufferMulti & operator -=(int i)
|
||||
{
|
||||
for (int c=0; c < m_numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
m_buffer[c] -= i;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
BufferMulti & operator = (const T& value)
|
||||
BufferMulti & operator =(const T& value)
|
||||
{
|
||||
for (uint c=0; c < m_numChannels; c++)
|
||||
for (uint c=0; c < numCh; c++)
|
||||
{
|
||||
m_buffer[c][0] = value;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
dsp::Buffer<T> quer(int offset=0)
|
||||
void quer(T *out, int offset=0) const
|
||||
{
|
||||
Buffer<T> querBuffer(numChannels());
|
||||
for (int c=0; c < m_numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
querBuffer[c] = m_buffer[c][offset];
|
||||
out[c] = m_buffer[c][offset];
|
||||
}
|
||||
return querBuffer;
|
||||
}
|
||||
|
||||
const dsp::Buffer<T> quer(int offset=0) const
|
||||
void quer(T *out, const int *offsets) const
|
||||
{
|
||||
Buffer<T> querBuffer(numChannels());
|
||||
for (int c=0; c < m_numChannels; c++)
|
||||
for (int c=0; c < numCh; c++)
|
||||
{
|
||||
querBuffer[c] = m_buffer[c][offset];
|
||||
out[c] = m_buffer[c][offsets[c]];
|
||||
}
|
||||
return querBuffer;
|
||||
}
|
||||
|
||||
dsp::Buffer<T> quer(std::initializer_list<int> offsets)
|
||||
{
|
||||
Buffer<T> querBuffer(offsets.size());
|
||||
|
||||
uint ch = 0;
|
||||
for (int offset: offsets)
|
||||
{
|
||||
querBuffer[ch] = m_buffer[ch][offset];
|
||||
ch++;
|
||||
}
|
||||
return querBuffer;
|
||||
}
|
||||
|
||||
const dsp::Buffer<T> quer(std::initializer_list<int> offsets) const
|
||||
{
|
||||
Buffer<T> querBuffer(offsets.size());
|
||||
|
||||
uint ch = 0;
|
||||
for (int offset: offsets)
|
||||
{
|
||||
querBuffer[ch] = m_buffer[ch][offset];
|
||||
ch++;
|
||||
}
|
||||
return querBuffer;
|
||||
}
|
||||
|
||||
|
||||
Buffer<T> at(uint channel)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user