BlitzArray

The BlitzArray is a wrapper for the blitz++ Array class; it provides compatibility with cvmlcpp.

Interface

The interface of BlitzArray should be fully compatible with that of blitz::array. To use the BlitzArray, either include it before including other parts of the cvmlcpp, or define USE_BLITZ during compilation.

Example

3D Fourier Transform

#include <cvmlcpp/base/BlitzArray>
#include <cvmlcpp/signal/Fourier>

using namespace cvmlcpp;

// Have a blitz++ array
blitz::Array<int, 3> a(3, 4, 5);
std::fill(a.begin(), a.end(), 7);

// Create a wrapper around "a" for cvmlcpp-compatibility
BlitzArray<int, 3> ba(a);
assert( (3*4*5*7) == std::accumulate(ba.begin(), ba.end(), 0));

// Create output directly as a wrapper
BlitzArray<std::complex<double>, 3> ba_fft;

// Compute 3D-Fourier tranform with "fftw"
doDFT(ba, ba_fft);

// Use ba_fft as any other blitz++ array
...

Problem with Constructors

The following code will not compile:

BlitzArray<std::complex<double>, 3> bc(3, 4, 5);
blitz::Array<std::complex<double>, 3> c(bc); /* Doesn't work */
The reason is that the compiler will not use the desired constructor, and compilation will be aborted. Hence, you must always create a blitz::Array<...> first, and create a BlitzArray<...> after that.