aboutsummaryrefslogtreecommitdiffhomepage
path: root/blas/level1_impl.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-11-04 22:25:59 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-11-04 22:25:59 +0100
commitfe1353080ea5760daea332a8904edd78c0a9fb36 (patch)
treeb12f3a0bde39f30caa0c95ae50833e3f28f6d18e /blas/level1_impl.h
parent15e8ad686c3c10a7730c1bb72f7dae1e2f46719f (diff)
fix error handling of level 1 routines
Diffstat (limited to 'blas/level1_impl.h')
-rw-r--r--blas/level1_impl.h46
1 files changed, 23 insertions, 23 deletions
diff --git a/blas/level1_impl.h b/blas/level1_impl.h
index 68580036c..bc99ddb57 100644
--- a/blas/level1_impl.h
+++ b/blas/level1_impl.h
@@ -30,6 +30,8 @@ int EIGEN_BLAS_FUNC(axpy)(int *n, RealScalar *palpha, RealScalar *px, int *incx,
Scalar* y = reinterpret_cast<Scalar*>(py);
Scalar alpha = *reinterpret_cast<Scalar*>(palpha);
+ if(*n<=0) return 0;
+
if(*incx==1 && *incy==1) vector(y,*n) += alpha * vector(x,*n);
else if(*incx>0 && *incy>0) vector(y,*n,*incy) += alpha * vector(x,*n,*incx);
else if(*incx>0 && *incy<0) vector(y,*n,-*incy).reverse() += alpha * vector(x,*n,*incx);
@@ -86,6 +88,8 @@ int EIGEN_BLAS_FUNC(copy)(int *n, RealScalar *px, int *incx, RealScalar *py, int
{
// std::cerr << "_copy " << *n << " " << *incx << " " << *incy << "\n";
+ if(*n<=0) return 0;
+
Scalar* x = reinterpret_cast<Scalar*>(px);
Scalar* y = reinterpret_cast<Scalar*>(py);
@@ -103,8 +107,7 @@ Scalar EIGEN_BLAS_FUNC(dot)(int *n, RealScalar *px, int *incx, RealScalar *py, i
{
// std::cerr << "_dot " << *n << " " << *incx << " " << *incy << "\n";
- if(*n<=0)
- return 0;
+ if(*n<=0) return 0;
Scalar* x = reinterpret_cast<Scalar*>(px);
Scalar* y = reinterpret_cast<Scalar*>(py);
@@ -121,10 +124,9 @@ int EIGEN_CAT(EIGEN_CAT(i,SCALAR_SUFFIX),amax_)(int *n, RealScalar *px, int *inc
{
// std::cerr << "i_amax " << *n << " " << *incx << "\n";
- Scalar* x = reinterpret_cast<Scalar*>(px);
+ if(*n<=0) return 0;
- if(*n<=0)
- return 0;
+ Scalar* x = reinterpret_cast<Scalar*>(px);
DenseIndex ret;
@@ -159,6 +161,8 @@ Scalar EIGEN_BLAS_FUNC(dotc)(int *n, RealScalar *px, int *incx, RealScalar *py,
{
// std::cerr << "_dotc " << *n << " " << *incx << " " << *incy << "\n";
+ if(*n<=0) return 0;
+
Scalar* x = reinterpret_cast<Scalar*>(px);
Scalar* y = reinterpret_cast<Scalar*>(py);
@@ -176,6 +180,8 @@ Scalar EIGEN_BLAS_FUNC(dotu)(int *n, RealScalar *px, int *incx, RealScalar *py,
{
// std::cerr << "_dotu " << *n << " " << *incx << " " << *incy << "\n";
+ if(*n<=0) return 0;
+
Scalar* x = reinterpret_cast<Scalar*>(px);
Scalar* y = reinterpret_cast<Scalar*>(py);
Scalar res;
@@ -194,10 +200,9 @@ Scalar EIGEN_BLAS_FUNC(dotu)(int *n, RealScalar *px, int *incx, RealScalar *py,
Scalar EIGEN_BLAS_FUNC(nrm2)(int *n, RealScalar *px, int *incx)
{
// std::cerr << "_nrm2 " << *n << " " << *incx << "\n";
- Scalar* x = reinterpret_cast<Scalar*>(px);
+ if(*n<=0) return 0;
- if(*n<=0)
- return 0;
+ Scalar* x = reinterpret_cast<Scalar*>(px);
if(*incx==1) return vector(x,*n).norm();
else return vector(x,*n,std::abs(*incx)).norm();
@@ -206,10 +211,9 @@ Scalar EIGEN_BLAS_FUNC(nrm2)(int *n, RealScalar *px, int *incx)
RealScalar EIGEN_CAT(EIGEN_CAT(REAL_SCALAR_SUFFIX,SCALAR_SUFFIX),nrm2_)(int *n, RealScalar *px, int *incx)
{
// std::cerr << "__nrm2 " << *n << " " << *incx << "\n";
- Scalar* x = reinterpret_cast<Scalar*>(px);
+ if(*n<=0) return 0;
- if(*n<=0)
- return 0;
+ Scalar* x = reinterpret_cast<Scalar*>(px);
if(*incx==1)
return vector(x,*n).norm();
@@ -221,14 +225,13 @@ RealScalar EIGEN_CAT(EIGEN_CAT(REAL_SCALAR_SUFFIX,SCALAR_SUFFIX),nrm2_)(int *n,
int EIGEN_BLAS_FUNC(rot)(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *pc, RealScalar *ps)
{
// std::cerr << "_rot " << *n << " " << *incx << " " << *incy << "\n";
+ if(*n<=0) return 0;
+
Scalar* x = reinterpret_cast<Scalar*>(px);
Scalar* y = reinterpret_cast<Scalar*>(py);
Scalar c = *reinterpret_cast<Scalar*>(pc);
Scalar s = *reinterpret_cast<Scalar*>(ps);
- if(*n<=0)
- return 0;
-
StridedVectorType vx(vector(x,*n,std::abs(*incx)));
StridedVectorType vy(vector(y,*n,std::abs(*incy)));
@@ -328,14 +331,13 @@ int EIGEN_BLAS_FUNC(rotmg)(RealScalar *d1, RealScalar *d2, RealScalar *x1, RealS
int EIGEN_BLAS_FUNC(scal)(int *n, RealScalar *palpha, RealScalar *px, int *incx)
{
+ if(*n<=0) return 0;
+
Scalar* x = reinterpret_cast<Scalar*>(px);
Scalar alpha = *reinterpret_cast<Scalar*>(palpha);
// std::cerr << "_scal " << *n << " " << alpha << " " << *incx << "\n";
- if(*n<=0)
- return 0;
-
if(*incx==1) vector(x,*n) *= alpha;
else vector(x,*n,std::abs(*incx)) *= alpha;
@@ -345,14 +347,13 @@ int EIGEN_BLAS_FUNC(scal)(int *n, RealScalar *palpha, RealScalar *px, int *incx)
#if ISCOMPLEX
int EIGEN_CAT(EIGEN_CAT(SCALAR_SUFFIX,REAL_SCALAR_SUFFIX),scal_)(int *n, RealScalar *palpha, RealScalar *px, int *incx)
{
+ if(*n<=0) return 0;
+
Scalar* x = reinterpret_cast<Scalar*>(px);
RealScalar alpha = *palpha;
// std::cerr << "__scal " << *n << " " << alpha << " " << *incx << "\n";
- if(*n<=0)
- return 0;
-
if(*incx==1) vector(x,*n) *= alpha;
else vector(x,*n,std::abs(*incx)) *= alpha;
@@ -364,12 +365,11 @@ int EIGEN_BLAS_FUNC(swap)(int *n, RealScalar *px, int *incx, RealScalar *py, int
{
// std::cerr << "_swap " << *n << " " << *incx << " " << *incy << "\n";
+ if(*n<=0) return 0;
+
Scalar* x = reinterpret_cast<Scalar*>(px);
Scalar* y = reinterpret_cast<Scalar*>(py);
- if(*n<=0)
- return 0;
-
if(*incx==1 && *incy==1) vector(y,*n).swap(vector(x,*n));
else if(*incx>0 && *incy>0) vector(y,*n,*incy).swap(vector(x,*n,*incx));
else if(*incx>0 && *incy<0) vector(y,*n,-*incy).reverse().swap(vector(x,*n,*incx));