// -*-C++-*- 

// Copyright (C) 2004 
// Christian Stimming <stimming@tuhh.de>

// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2, or (at
// your option) any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.

// You should have received a copy of the GNU Lesser General Public License along
// with this library; see the file COPYING.  If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.

//      LAPACK++ (V. 1.1)

/** @file
 * @brief Some additional vector-matrix operators
 *
 * DEPRECATED. This file defines some additional operators for vectors
 * and matrices. But in general the Blas functions from blas1pp.h,
 * blas2pp.h and blas3pp.h are much faster and should be preferred.
 */

#ifndef _BLAS_PP_H_
#define _BLAS_PP_H_

// requires
//

#include "lafnames.h"
#include LA_EXCEPTION_H
#include "blas1pp.h"
#include "blas2pp.h"
#include "blas3pp.h"
#include <cmath>
#include LA_VECTOR_DOUBLE_H


// Only enable this when LA_NO_DEPRECATED is not defined
#ifndef LA_NO_DEPRECATED

//-------------------------------------
// Vector/Vector operators
//-------------------------------------

/** @name Vector operators (deprecated) */
//@{
/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaVectorDouble operator*(const LaVectorDouble &x, double a);
    
/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
inline LaVectorDouble operator*(double a, const LaVectorDouble &x)
{
    return operator*(x,a);
}

/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT double operator*(const LaVectorDouble &dx, 
			   const LaVectorDouble &dy);
                      
/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaVectorDouble operator+(const LaVectorDouble &dx, 
				   const LaVectorDouble &dy);

/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaVectorDouble operator-(const LaVectorDouble &dx, 
				   const LaVectorDouble &dy);
//@}

//-------------------------------------
/// @name Matrix/Vector operators (deprecated) 
//-------------------------------------
//@{

/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaVectorDouble operator*(const LaGenMatDouble &A, 
				   const LaVectorDouble &dx);

#ifdef _LA_BAND_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaBandMatDouble &A, 
				   const LaVectorDouble &dx);
#endif

#ifdef _LA_SYMM_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaSymmMatDouble &A, 
				   const LaVectorDouble &dx);
#endif

#ifdef _LA_SYMM_BAND_MAT_DOUBLE_H_ 
DLLIMPORT LaVectorDouble operator*(const LaSymmBandMatDouble &A, 
				   const LaVectorDouble &dx);
#endif


#ifdef _LA_SPD_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaSpdMatDouble &AP, 
				   const LaVectorDouble &dx);
#endif

#ifdef _LA_LOWER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaLowerTriangMatDouble &A, 
				   const LaVectorDouble &dx);
#endif

#ifdef _LA_UPPER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaUpperTriangMatDouble &A, 
				   const LaVectorDouble &dx);
#endif

#ifdef _LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaUnitLowerTriangMatDouble &A,
				   const LaVectorDouble &dx);
#endif

#ifdef _LA_UNIT_UPPER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaUnitUpperTriangMatDouble &A,
				   const LaVectorDouble &dx);
#endif
//@}

//-------------------------------------
/// @name Matrix/Matrix operators (deprecated) 
//-------------------------------------
//@{
/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaGenMatDouble operator*(const LaGenMatDouble &A, 
				   const LaGenMatDouble &B);

#ifdef _LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaGenMatDouble operator*(const LaUnitLowerTriangMatDouble &A,
				   const LaGenMatDouble &B);
#endif

#ifdef _LA_UNIT_UPPER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaGenMatDouble operator*(const LaUnitUpperTriangMatDouble &A,
				   const LaGenMatDouble &B);
#endif

#ifdef _LA_LOWER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaGenMatDouble operator*(const LaLowerTriangMatDouble &A,
				   const LaGenMatDouble &B);
#endif

#ifdef _LA_UPPER_TRIANG_MAT_DOUBLE_H_
DLLIMPORT LaGenMatDouble operator*(const LaUpperTriangMatDouble &A,
				   const LaGenMatDouble &B);
#endif

#ifdef _LA_SYMM_MAT_DOUBLE_H_
DLLIMPORT LaGenMatDouble operator*(const LaSymmMatDouble &A, 
				   const LaGenMatDouble &B);
#endif

#ifdef _LA_SYMM_TRIDIAG_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaSymmTridiagMatDouble& A, 
				   const LaVectorDouble& X);
#endif

#ifdef  _LA_TRIDIAG_MAT_DOUBLE_H_
DLLIMPORT LaVectorDouble operator*(const LaTridiagMatDouble& A, 
				   const LaVectorDouble& X);
#endif

/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaGenMatDouble operator-(const LaGenMatDouble &A, 
				   const LaGenMatDouble &B);

/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaGenMatDouble operator+(const LaGenMatDouble &A, 
				   const LaGenMatDouble &B);

# ifdef LA_COMPLEX_SUPPORT
/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaGenMatComplex operator+(const LaGenMatComplex &A, 
				    const LaGenMatComplex &B);

/** DEPRECATED. Use the Blas functions from blas1pp.h, blas2pp.h and
 * blas3pp.h instead because they are much faster. These operators can
 * already be disabled when you #define LA_NO_DEPRECATED. */
DLLIMPORT LaGenMatComplex operator-(const LaGenMatComplex &A, 
				    const LaGenMatComplex &B);
//@}
# endif // LA_COMPLEX_SUPPORT

#endif // LA_NO_DEPRECATED

#endif  // _BLAS_PP_H_


syntax highlighted by Code2HTML, v. 0.9.1