![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsVector.hpp 00003 ******************************************************************************/ 00007 /****************************************************************************** 00008 SUKITTI PUNAK (09/05/2004) 00009 UPDATE (08/27/2010) 00010 ******************************************************************************/ 00011 #ifndef TAPs_VECTOR_HPP 00012 #define TAPs_VECTOR_HPP 00013 00014 #include "TAPsMath.hpp" 00015 00016 BEGIN_NAMESPACE_TAPs 00017 //============================================================================= 00018 template <typename T, int N> 00019 class Vector { 00020 //============================================================================= 00021 protected: 00022 T t[N]; 00023 //------------------------------------------------------------------------- 00024 // Static Data Members for Data Conversions 00025 static float g_f[N]; 00026 static double g_d[N]; 00027 static long double g_ld[N]; 00028 //------------------------------------------------------------------------- 00029 public: 00030 //------------------------------------------------------------------------- 00032 friend std::ostream & operator<< ( std::ostream &output, Vector<T,N> const &v ) 00033 { 00034 //output << typeid(*this).name() << "( "; 00035 output << "Vector<" << typeid(T).name() << "," << N << ">( "; 00036 int i; 00037 for ( i = 0; i < N-1; ++i ) 00038 { 00039 output << v.t[i] << ", "; 00040 } 00041 output << v.t[i] << " )'"; //<< std::endl; 00042 return output; 00043 } 00044 //------------------------------------------------------------------------- 00046 Vector (); 00048 Vector ( T const af[N] ); 00050 Vector ( Vector<T,N> const &v ); 00052 ~Vector (); 00053 //------------------------------------------------------------------------- 00055 inline T & operator[] ( int i ); 00057 inline T const & operator[] ( int i ) const; 00059 inline int Size () const; 00060 //------------------------------------------------------------------------- 00062 operator T * (); 00064 operator const T * () const; 00065 //------------------------------------------------------------------------- 00067 inline Vector<T,N> & operator= ( Vector<T,N> const &v ); 00068 //------------------------------------------------------------------------- 00069 // Comparison Operators 00070 inline bool operator== ( Vector<T,N> const &v ) const; 00071 inline bool operator!= ( Vector<T,N> const &v ) const; 00072 inline bool operator<= ( Vector<T,N> const &v ) const; 00073 inline bool operator< ( Vector<T,N> const &v ) const; 00074 inline bool operator>= ( Vector<T,N> const &v ) const; 00075 inline bool operator> ( Vector<T,N> const &v ) const; 00076 //------------------------------------------------------------------------- 00077 // Arithmetic Operators 00078 inline Vector<T,N> operator- () const; // negation 00079 inline Vector<T,N> operator+ ( Vector<T,N> const &v ) const; 00080 inline Vector<T,N> operator- ( Vector<T,N> const &v ) const; 00081 inline Vector<T,N> operator* ( T s ) const; 00082 inline Vector<T,N> operator/ ( T s ) const; 00083 friend inline Vector<T,N> operator* ( T s, Vector<T,N> const &v ) { return v*s; } 00084 //------------------------------------------------------------------------- 00085 // Arithmetic Update Operators 00086 inline Vector<T,N> & operator+= ( Vector<T,N> const &v ); 00087 inline Vector<T,N> & operator-= ( Vector<T,N> const &v ); 00088 inline Vector<T,N> & operator*= ( T s ); 00089 inline Vector<T,N> & operator/= ( T s ); 00090 //------------------------------------------------------------------------- 00091 // Vector Operations 00093 inline T Length () const; 00095 inline T Magnitude () const; 00097 inline T SquaredLength () const; 00099 inline Vector<T,N> GetUnit ( T tolerance = Math<T>::EPSILON ) const; 00101 inline Vector<T,N> & Normalized ( T tolerance = Math<T>::EPSILON ); 00102 inline T Dot ( Vector<T,N> const &v ) const; // Dot Product 00103 inline T operator* ( Vector<T,N> const &v ) const ; // Dot Product Operator 00104 //inline Vector<T,N> Cross ( Vector<T,N> const &v ) const; // Cross Product 00105 //inline Vector<T,N> operator^ ( Vector<T,N> const &v ) const; // Cross Product Operator 00106 00108 inline Vector<T,N> ComponentWiseMult ( Vector<T,N> const &v ) const; 00110 inline Vector<T,N> ComponentWiseDivs ( Vector<T,N> const &v ) const; 00112 inline void UpdateByComponentWiseMult ( Vector<T,N> const &v ); 00114 inline void UpdateByComponentWiseDivs ( Vector<T,N> const &v ); 00115 00116 //------------------------------------------------------------------------- 00117 // Static Member Functions for Data Conversions 00118 const float * GetDataFloat () const; 00119 const double * GetDataDouble () const; 00120 const long double * GetDataLongDouble () const; 00121 float * GetDataFloat (); 00122 double * GetDataDouble (); 00123 long double * GetDataLongDouble (); 00124 //------------------------------------------------------------------------- 00125 }; // END CLASS Vector 00126 //============================================================================= 00127 00128 /* 00129 //============================================================================= 00130 // Global Functions 00131 //----------------------------------------------------------------------------- 00132 // Std Output Via << Operator 00133 template <typename T, int N> 00134 std::ostream & operator<< ( std::ostream &output, Vector<T,N> const &v ); 00135 //----------------------------------------------------------------------------- 00136 */ 00137 00138 //============================================================================= 00139 END_NAMESPACE_TAPs 00140 //----------------------------------------------------------------------------- 00141 // Include definition if TAPs_USE_EXPORT is not defined 00142 //#if !defined( TAPs_USE_EXPORT ) 00143 #include "TAPsVector.cpp" 00144 //#endif 00145 //----------------------------------------------------------------------------- 00146 #endif 00147 //345678901234567890123456789012345678901234567890123456789012345678901234567890 00148 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8