TAPs 0.7.7.3
TAPsVector.hpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines