1 #include <cxxblas/cxxblas.cxx>
 2 #include <cstdlib>
 3 
 4 extern "C" {
 5 
 6 #ifndef COMPLEX_FLOAT1
 7     typedef CBLAS_FLOAT                 CBLAS_ALPHA;
 8     typedef CBLAS_FLOAT                 CXXBLAS_FLOAT;
 9 #else
10     typedef const CBLAS_FLOAT *         CBLAS_ALPHA;
11     typedef std::complex<CBLAS_FLOAT>   CXXBLAS_FLOAT;
12 #endif
13 
14     void
15     CBLAS_NAME(CBLAS_INT n,
16                CBLAS_ALPHA _alpha, const CBLAS_FLOAT *_x, CBLAS_INT incX,
17                CBLAS_FLOAT *_y, CBLAS_INT incY)
18 #ifdef CREATE_CBLAS
19     {
20         const CXXBLAS_FLOAT *x = reinterpret_cast<const CXXBLAS_FLOAT *>(_x);
21         CXXBLAS_FLOAT *y = reinterpret_cast<CXXBLAS_FLOAT *>(_y);
22 
23 #   ifndef COMPLEX_FLOAT1
24         CXXBLAS_FLOAT alpha = _alpha;
25 #   else
26         CXXBLAS_FLOAT alpha(_alpha[0], _alpha[1]);
27 #   endif
28 
29         cxxblas::axpy<CBLAS_INT,
30                       CXXBLAS_FLOAT,
31                       CXXBLAS_FLOAT>(n, alpha, x, incX, y, incY);
32     }
33 #else
34     ;
35 #endif // CREATE_CBLAS
36 
37 #ifdef CREATE_BLAS
38     void
39     BLAS_NAME(CBLAS_INT *_n,
40               CBLAS_FLOAT *_alpha, const CBLAS_FLOAT *x, CBLAS_INT *_incX,
41               CBLAS_FLOAT *y, CBLAS_INT *_incY)
42     {
43 
44         CBLAS_INT n       = *_n;
45         CBLAS_INT incX    = *_incX;
46         CBLAS_INT incY    = *_incY;
47         
48 #   ifndef COMPLEX_FLOAT2
49         CBLAS_ALPHA alpha  = *_alpha;
50 #   else
51         CBLAS_ALPHA alpha = _alpha;
52 #   endif
53 
54         // the blas interface calls the cblas interface
55         // so any blas-test will also test the cblas-interface
56         CBLAS_NAME(n, alpha, x, incX, y, incY);
57     }
58 #endif // CREATE_BLAS
59 
60 // extern "C"