From fe1353080ea5760daea332a8904edd78c0a9fb36 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Thu, 4 Nov 2010 22:25:59 +0100 Subject: fix error handling of level 1 routines --- blas/level1_impl.h | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'blas/level1_impl.h') 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(py); Scalar alpha = *reinterpret_cast(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(px); Scalar* y = reinterpret_cast(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(px); Scalar* y = reinterpret_cast(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(px); + if(*n<=0) return 0; - if(*n<=0) - return 0; + Scalar* x = reinterpret_cast(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(px); Scalar* y = reinterpret_cast(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(px); Scalar* y = reinterpret_cast(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(px); + if(*n<=0) return 0; - if(*n<=0) - return 0; + Scalar* x = reinterpret_cast(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(px); + if(*n<=0) return 0; - if(*n<=0) - return 0; + Scalar* x = reinterpret_cast(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(px); Scalar* y = reinterpret_cast(py); Scalar c = *reinterpret_cast(pc); Scalar s = *reinterpret_cast(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(px); Scalar alpha = *reinterpret_cast(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(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(px); Scalar* y = reinterpret_cast(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)); -- cgit v1.2.3