[linux-audio-dev] [ot] [rant] gcc, you let me down one time too many
Jussi Laako
jussi.laako at pp.inet.fi
Wed Jun 8 20:35:53 UTC 2005
On Wed, 2005-06-08 at 22:09 +0300, Jussi Laako wrote:
> And you can still access the individual samples by using vData[n]
> without significant performance penalty compared to a simple float
> array. And I say "significant" here just because it also performs bounds
> checking. It could be made even equally fast by changing the operator[]
> implementation.
I wanted to make sure that this thing is clear, so I'll clarify it even
further.
You can derive a new class from the template and overload the []
operator to perform exactly same as in C. After compilation the result
is the same no matter if the template or C array is used.
Except that the template automatically resizes, is aligned to
architecture optimal boundary size, automatically selects asm SIMD
optimizations for current runtime architecture, etc.
#include <dsp/DSPVector.hh>
template <class TOwnVector_t> class clOwnVector :
public clDSPVector<TOwnVector_t>
{
public:
TOwnVector_t & operator[] (size_t uIndex)
{
return (clDSPVector<TOwnVector_t>::GetRawPtr()[uIndex]);
}
};
int main (int argc, char *argv[])
{
float fpInit[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
clOwnVector<float> vecOwn;
vecOwn.Put(fpInit, 5);
vecOwn *= vecOwn;
printf("%g %g %g %g %g\n",
vecOwn[0],
vecOwn[1],
vecOwn[2],
vecOwn[3],
vecOwn[4]);
return 0;
}
--
Jussi Laako <jussi.laako at pp.inet.fi>
More information about the Linux-audio-dev
mailing list