LAMA
|
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_