Documentation


vectorVec.h

Go to the documentation of this file.
00001 #ifndef animal_vectorvec_hpp___________________________
00002 #define animal_vectorvec_hpp___________________________
00003 
00007 #include <animal/vector.h>
00008 
00009 namespace animal {
00010 
00021   template<class Vec>
00022   struct VectorVec : public animal::vector<Vec> 
00023   {
00024 
00026 VectorVec(){}
00027 
00029     VectorVec( std::size_t s )
00030       : animal::vector<Vec>(s)
00031     {}
00032 
00034     VectorVec( std::size_t s, Vec v )
00035       : animal::vector<Vec>(s,v)
00036     {}
00037 
00038   };
00039 
00042 template <class V> inline
00043 double v_dot( const VectorVec<V>& a, const VectorVec<V>& b )
00044 {
00045   //cerr << "v_dot, a = " << animal::v_output(a) << endl;
00046   //cerr << "v_dot, b = " << animal::v_output(b) << endl;
00047   double    res = 0;
00048   typename animal::container_traits<VectorVec<V> const>::iterator ai,aend,bi;
00049   for( ai=animal::begin(a),aend=animal::end(a),bi=animal::begin(b); ai!=aend; ++ai, ++bi )
00050     {
00051       //res += animal::v_dot(*ai,*bi);
00052       res += animal::v_dot((*ai),(*bi));
00053       //cerr << "v_dot, ai = " << *ai <<", bi = "<< *bi << endl;
00054     }
00055   return res;
00056 }
00057 
00059 template <class V> inline
00060 void v_eq ( VectorVec<V>& Y, const VectorVec<V>& X )
00061 {
00062     assert( animal::size(Y) == animal::size(X) );
00063     typename animal::container_traits<VectorVec<V> >::iterator Yi = animal::begin(Y), Yend=animal::end(Y);
00064     typename animal::container_traits<VectorVec<V> const>::iterator Xi = animal::begin(X);
00065     for( ; Yi!=Yend; ++Yi, ++Xi )
00066         *(Yi) =  (*Xi);
00067 }
00068 
00070 template <class V> inline
00071 void v_eq ( VectorVec<V>& Y, const VectorVec<V>& W, const double& a, const VectorVec<V>& X )
00072 {
00073     assert( animal::size(Y) == animal::size(X) );
00074     assert( animal::size(Y) == animal::size(W) );
00075     typename animal::container_traits<VectorVec<V> >::iterator Yi = animal::begin(Y), Yend=animal::end(Y);
00076     typename animal::container_traits<VectorVec<V> const>::iterator Xi = animal::begin(X), Wi=animal::begin(W);
00077     for( ; Yi!=Yend; ++Yi, ++Xi, ++Wi )
00078         *(Yi) = (*Wi) + (*Xi)*a;
00079 }
00080 
00082 template <class V> inline
00083 void v_peq ( VectorVec<V>& Y, double a, const VectorVec<V>& X )
00084 {
00085     assert( animal::size(Y) == animal::size(X) );
00086     typename animal::container_traits<VectorVec<V> >::iterator Yi = animal::begin(Y), Yend=animal::end(Y);
00087     typename animal::container_traits<VectorVec<V> const>::iterator Xi = animal::begin(X);
00088     for( ; Yi!=Yend; ++Yi, ++Xi )
00089         *(Yi) += (*Xi)*a;
00090 }
00091 
00093 template <class V> inline
00094 void v_meq ( VectorVec<V>& Y, const VectorVec<V>& X )
00095 {
00096     assert( animal::size(Y) == animal::size(X) );
00097     typename animal::container_traits<VectorVec<V> >::iterator Yi = animal::begin(Y), Yend=animal::end(Y);
00098     typename animal::container_traits<VectorVec<V> const>::iterator Xi = animal::begin(X);
00099     for( ; Yi!=Yend; ++Yi, ++Xi )
00100         *(Yi) -= (*Xi);
00101 }
00102 
00104 template <class V> inline
00105 void v_teq ( VectorVec<V>& v, const double& a )
00106 {
00107     typename animal::container_traits<VectorVec<V> >::iterator Yi = animal::begin(v), Yend=animal::end(v);
00108     for( ; Yi!=Yend; ++Yi )
00109         *(Yi) *= a;
00110 }
00111 
00113 template <class V> inline
00114 double v_norm( const VectorVec<V>& a ){ return sqrt(v_dot(a,a)); }
00115 
00116 
00117 }//animal
00118 
00119 #endif

Generated on Thu Dec 23 13:52:27 2004 by doxygen 1.3.6