inlib  1.2.0
/Users/barrand/private/dev/softinex/old/inexlib-1.2/inlib/inlib/a2
Go to the documentation of this file.
00001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
00002 // See the file inlib.license for terms.
00003 
00004 #ifndef inlib_a2
00005 #define inlib_a2
00006 
00007 // Inheritance :
00008 #include "sqm"
00009 
00010 namespace inlib {
00011 namespace a2 { //2 is a dimension.
00012 
00013 // vec is an a2
00014 
00015 template <class T>
00016 class vec : public array<T> {
00017 public:
00018   vec():array<T>(1,2){}
00019   vec(const T a_vec[2]):array<T>(1,2) {
00020     array<T>::m_vector[0] = a_vec[0];
00021     array<T>::m_vector[1] = a_vec[1];
00022   }
00023   vec(const T& a0,const T& a1):array<T>(1,2) {
00024     array<T>::m_vector[0] = a0;
00025     array<T>::m_vector[1] = a1;
00026   }
00027   virtual ~vec() {}
00028 public:
00029   vec(const vec& a_from):array<T>(a_from){}
00030   vec& operator=(const vec& a_from) {
00031     array<T>::operator=(a_from);
00032     return *this;
00033   }
00034 public:
00035   T v0() const { return array<T>::m_vector[0];}
00036   T v1() const { return array<T>::m_vector[1];}
00037 
00038   void v0(const T& a_value) { array<T>::m_vector[0] = a_value;}
00039   void v1(const T& a_value) { array<T>::m_vector[1] = a_value;}
00040 
00041   void v01(const T& a1,const T& a2) {
00042     array<T>::m_vector[0] = a1;
00043     array<T>::m_vector[1] = a2;
00044   }
00045   void v01(const T aV[2]) {
00046     array<T>::m_vector[0] = aV[0];
00047     array<T>::m_vector[1] = aV[1];
00048   }
00049   void v01(T& a1,T& a2) const {
00050     a1 = array<T>::m_vector[0];
00051     a2 = array<T>::m_vector[1];
00052   }    
00053   void set_value(const T& a1,const T& a2) {
00054     array<T>::m_vector[0] = a1;
00055     array<T>::m_vector[1] = a2;
00056   }
00057 };
00058 
00059 // sqm is an a22
00060 
00061 template <class T>
00062 class sqm : public inlib::sqm<T> {
00063 public:
00064   sqm(): inlib::sqm<T>(2){}
00065   virtual ~sqm() {}
00066 public:
00067   sqm(const sqm& a_from): inlib::sqm<T>(a_from){}
00068   sqm& operator=(const sqm& a_from) {
00069     inlib::sqm<T>::operator=(a_from);
00070     return *this;
00071   }
00072 public:
00073   T v00() const {return array<T>::m_vector[0 + 0 * 2];}
00074   T v01() const {return array<T>::m_vector[0 + 1 * 2];}
00075   T v10() const {return array<T>::m_vector[1 + 0 * 2];}
00076   T v11() const {return array<T>::m_vector[1 + 1 * 2];}
00077 
00078   void v00(const T& a_value) {array<T>::m_vector[0+0*2] = a_value;}
00079   void v10(const T& a_value) {array<T>::m_vector[1+0*2] = a_value;}
00080   void v01(const T& a_value) {array<T>::m_vector[0+1*2] = a_value;}
00081   void v11(const T& a_value) {array<T>::m_vector[1+1*2] = a_value;}
00082 
00083   virtual T determinant() const {
00084     return v00() * v11() - v10() * v01();
00085   }
00086 
00087   bool invert(sqm& a_result) const {
00088     T deter = determinant();
00089     if(deter==array<T>::zero()) return false;
00090     a_result.v00( v11());
00091     a_result.v11( v00());
00092     a_result.v01(-v01());
00093     a_result.v10(-v10());
00094     a_result.multiply(1./deter);  
00095     return true;
00096   }
00097 
00098 };
00099 
00100 template <class T>
00101 inline sqm<T> commutator(const sqm<T>& a1,const sqm<T>& a2) {
00102   return a1*a2-a2*a1;
00103 }
00104 template <class T>
00105 inline sqm<T> anticommutator(const sqm<T>& a1,const sqm<T>& a2) {
00106   return a1*a2+a2*a1;
00107 }
00108 
00109 template <class T>
00110 inline sqm<T> operator-(const sqm<T>& a1,const sqm<T>& a2) {
00111   sqm<T> res(a1);
00112   res.subtract(a2);
00113   return res;
00114 }
00115 
00116 template <class T>
00117 inline sqm<T> operator+(const sqm<T>& a1,const sqm<T>& a2) {
00118   sqm<T> res(a1);
00119   res.add(a2);
00120   return res;
00121 }
00122 
00123 template <class T>
00124 inline sqm<T> operator*(const sqm<T>& a1,const sqm<T>& a2) {
00125   sqm<T> res;
00126   a1.mx_mul(a2,res);
00127   return res;
00128 }
00129 
00130 }}
00131 
00132 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines