Consider the following example that declares the constructor
with reference to an array as argument.
fir.h
class FIR
{
private:
int32 (&coeffs)[NUM_COEFFS];
int32 tapDelayLine[NUM_COEFFS];
uint32 numSamples;
public:
FIR(int32(&coefficients)[NUM_COEFFS], uint32 samples);
void filter(input_window_int32* in, output_window_int32* out);
static void registerKernelClass()
{
REGISTER_FUNCTION(FIR::filter);
REGISTER_PARAMETER(coeffs);
}
};
fir.cpp
#include "fir.h"
FIR::FIR(int32(&coefficients)[NUM_COEFFS], uint32 samples)
: coeffs(coefficients)
{
for (int i = 0; i < NUM_COEFFS; i++)
tapDelayLine[i] = 0;
numSamples = samples;
}
void FIR::filter(input_window_int32* in, output_window_int32* out)
{
...
}
Here, member variable coeffs is an int32
(&)[NUM_COEFFS] data type. The constructor initializer
coeffs(coefficients) initializes coeffs to the
reference to an array allocated externally to the class object. To let the
aiecompiler know that the coeffs member variable is intended to be
allocated by the compiler, you must use REGISTER_PARAMETER to register an array
reference member variable inside the registerKernelClass() method.
The aiecompiler throws an appropriate error if the constructors
with reference to an array are not registered.