LAMA
/home/brandes/workspace/LAMA/src/lama/expression/VectorExpressions.hpp
Go to the documentation of this file.
00001 
00033 #ifndef LAMA_VECTOREXPRESSIONS_HPP_
00034 #define LAMA_VECTOREXPRESSIONS_HPP_
00035 
00036 #include <lama/Vector.hpp>
00037 #include <lama/expression/Expression.hpp>
00038 
00039 namespace lama
00040 {
00041 
00050 inline Expression<Scalar,Vector,Times> operator*(
00051     const Scalar& alpha,
00052     const Vector& x)
00053 {
00054     return Expression<Scalar,Vector,Times>( alpha, x );
00055 }
00056 
00065 inline Expression<Scalar,Vector,Times> operator*(
00066     const Vector& x,
00067     const Scalar& alpha)
00068 {
00069     return Expression<Scalar,Vector,Times>( alpha, x );
00070 }
00071 
00080 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator+(
00081     const Vector& x,
00082     const Vector& y)
00083 {
00084     const Scalar alpha( 1.0 );
00085     const Scalar beta( 1.0 );
00086 
00087     Expression<Scalar,Vector,Times> exp1( alpha, x );
00088     Expression<Scalar,Vector,Times> exp2( beta, y );
00089     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp1,exp2 );
00090 }
00091 
00100 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator+(
00101     const Vector& x,
00102     const Expression<Scalar,Vector,Times>& exp2)
00103 {
00104     Expression<Scalar,Vector,Times> exp1( 1.0, x );
00105     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp1,exp2 );
00106 }
00107 
00116 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator+(
00117     const Expression<Scalar,Vector,Times>& exp1,
00118     const Expression<Scalar,Vector,Times>& exp2)
00119 {
00120     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp1,exp2 );
00121 }
00122 
00131 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator+(
00132     const Expression<Scalar,Vector,Times>& exp2,
00133     const Vector& x
00134     )
00135 {
00136     Expression<Scalar,Vector,Times> exp1( 1.0, x );
00137     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp1, exp2 );
00138 }
00139 
00148 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator+(
00149     const Expression<Vector,Scalar,Times>& exp2,
00150     const Vector& x
00151     )
00152 {
00153     Expression<Scalar,Vector,Times> exp(exp2.getArg2(),exp2.getArg1());
00154     Expression<Scalar,Vector,Times> exp1( 1.0, x );
00155     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp, exp1 );
00156 }
00157 
00158 /* ------------------------------------------------------------------------- */
00159 
00168 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator-(
00169     const Vector& x,
00170     const Expression<Scalar,Vector,Times>& exp2)
00171 {
00172     Expression<Scalar,Vector,Times> exp1( 1.0, x );
00173     Expression<Scalar,Vector,Times> tmpExp( -exp2.getArg1(), exp2.getArg2() );
00174     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp1, tmpExp );
00175 }
00176 
00186 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator-(
00187     const Expression<Scalar,Vector,Times>& exp1,
00188     const Expression<Scalar,Vector,Times>& exp2)
00189 {
00190     Expression<Scalar,Vector,Times> tmpExp( -exp2.getArg1(), exp2.getArg2() );
00191     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp1, tmpExp );
00192 }
00193 
00202 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator-(
00203     const Vector& x,
00204     const Vector& y)
00205 {
00206     const Scalar alpha( 1.0 );
00207     const Scalar beta( -1.0 );
00208 
00209     Expression<Scalar,Vector,Times> exp1( alpha, x );
00210     Expression<Scalar,Vector,Times> exp2( beta, y );
00211     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( exp1, exp2 );
00212 }
00213 
00227 inline Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus > operator-(
00228     const Expression<Scalar,Vector,Times>& exp2,
00229     const Vector& x)
00230 {
00231     Expression<Scalar,Vector,Times> tmpExp( exp2.getArg1(), exp2.getArg2() );
00232     Expression<Scalar,Vector,Times> exp1( -1.0, x );
00233     return Expression<Expression<Scalar,Vector,Times>, Expression<Scalar,Vector,Times>, Plus >( tmpExp, exp1 );
00234 }
00235 
00236 
00237 }
00238 
00239 #endif // LAMA_VECTOREXPRESSIONS_HPP_