![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsSimClock.hpp 00003 ******************************************************************************/ 00007 /****************************************************************************** 00008 SUKITTI PUNAK (07/12/2005) 00009 UPDATE (08/18/2010) 00010 ******************************************************************************/ 00011 #include "TAPsVectorSet.hpp" 00012 // Using Inclusion Model (i.e. definitions are included in declarations) 00013 // (this name.cpp is included in name.hpp) 00014 // Each friend is defined directly inside its declaration. 00015 00016 BEGIN_NAMESPACE_TAPs__Simulation 00017 //============================================================================= 00018 // Constructors and Destructor 00019 //----------------------------------------------------------------------------- 00020 template <typename T> 00021 VectorSet<T>::VectorSet () : std::vector<T>() 00022 {} 00023 //----------------------------------------------------------------------------- 00024 template <typename T> 00025 VectorSet<T>::VectorSet ( int size ) : std::vector<T>( size ) 00026 {} 00027 //----------------------------------------------------------------------------- 00028 template <typename T> 00029 VectorSet<T>::VectorSet ( T const af[], int size ) : std::vector<T>( size ) 00030 { 00031 for ( int i = 0; i < size; ++i ) 00032 (*this)[i] = af[i]; 00033 } 00034 //----------------------------------------------------------------------------- 00035 template <typename T> 00036 VectorSet<T>::VectorSet ( VectorSet<T> const &v ) : std::vector<T>( v.size() ) 00037 { 00038 for ( int i = 0; i < static_cast<int>(this->size()); ++i ) 00039 (*this)[i] = v[i]; 00040 } 00041 //----------------------------------------------------------------------------- 00042 template <typename T> 00043 VectorSet<T>::~VectorSet () 00044 {} 00045 //----------------------------------------------------------------------------- 00046 //============================================================================= 00047 // Assignment Operator 00048 //----------------------------------------------------------------------------- 00049 template <typename T> 00050 VectorSet<T> & VectorSet<T>::operator= ( VectorSet<T> const &v ) 00051 { 00052 if ( this != &v ) 00053 { 00054 this->resize( v.size() ); 00055 for ( int i = 0; i < static_cast<int>(this->size()); ++i ) 00056 (*this)[i] = v[i]; 00057 } 00058 return *this; 00059 } 00060 //============================================================================= 00061 // Arithmetic Operations 00062 //----------------------------------------------------------------------------- 00063 template <typename T> 00064 VectorSet<T> VectorSet<T>::operator- () const 00065 { 00066 const int size = static_cast<int>(this->size()); 00067 VectorSet<T> retVector( size ); 00068 for ( int i = 0; i < size; ++i ) 00069 retVector[i] = -(*this)[i]; 00070 return retVector; 00071 } 00072 //----------------------------------------------------------------------------- 00073 template <typename T> 00074 VectorSet<T> VectorSet<T>::operator+ ( VectorSet<T> const &v ) const 00075 { 00076 const int size = static_cast<int>(this->size()); 00077 assert( size == v.size() ); 00078 VectorSet<T> retVector( size ); 00079 for ( int i = 0; i < size; ++i ) 00080 retVector[i] = (*this)[i] + v[i]; 00081 return retVector; 00082 } 00083 //----------------------------------------------------------------------------- 00084 template <typename T> 00085 VectorSet<T> VectorSet<T>::operator- ( VectorSet<T> const &v ) const 00086 { 00087 const int size = static_cast<int>(this->size()); 00088 assert( size == v.size() ); 00089 VectorSet<T> retVector( size ); 00090 for ( int i = 0; i < size; ++i ) 00091 retVector[i] = (*this)[i] - v[i]; 00092 return retVector; 00093 } 00094 //----------------------------------------------------------------------------- 00095 template <typename T> 00096 VectorSet<T> VectorSet<T>::operator* ( VectorSet<T> const &v ) const 00097 { 00098 const int size = static_cast<int>(this->size()); 00099 assert( size == v.size() ); 00100 VectorSet<T> retVector( size ); 00101 for ( int i = 0; i < size; ++i ) 00102 retVector[i] = (*this)[i] * v[i]; 00103 return retVector; 00104 } 00105 //----------------------------------------------------------------------------- 00106 template <typename T> 00107 VectorSet<T> VectorSet<T>::operator/ ( VectorSet<T> const &v ) const 00108 { 00109 const int size = static_cast<int>(this->size()); 00110 assert( size == v.size() ); 00111 VectorSet<T> retVector( size ); 00112 for ( int i = 0; i < size; ++i ) 00113 retVector[i] = (*this)[i] / v[i]; 00114 return retVector; 00115 } 00116 //----------------------------------------------------------------------------- 00117 template <typename T> 00118 VectorSet<T> VectorSet<T>::operator* ( T s ) const 00119 { 00120 const int size = static_cast<int>(this->size()); 00121 VectorSet<T> retVector( size ); 00122 for ( int i = 0; i < size; ++i ) 00123 retVector[i] = (*this)[i] * s; 00124 return retVector; 00125 } 00126 //----------------------------------------------------------------------------- 00127 template <typename T> 00128 VectorSet<T> VectorSet<T>::operator/ ( T s ) const 00129 { 00130 const int size = static_cast<int>(this->size()); 00131 VectorSet<T> retVector( size ); 00132 if ( s != Math<T>::ZERO ) 00133 for ( int i = 0; i < size; ++i ) 00134 retVector[i] = (*this)[i] / s; 00135 else 00136 for ( int i = 0; i < size; ++i ) 00137 retVector[i] = Math<T>::INFINITY; 00138 return retVector; 00139 } 00140 //----------------------------------------------------------------------------- 00141 //============================================================================= 00142 // Arithmetic Update Operators 00143 //----------------------------------------------------------------------------- 00144 template <typename T> 00145 VectorSet<T> & VectorSet<T>::operator+= ( VectorSet<T> const &v ) 00146 { 00147 assert( this->size() == v.size() ); 00148 for ( int i = 0; i < static_cast<int>(this->size()); ++ i ) 00149 (*this)[i] += v[i]; 00150 return *this; 00151 } 00152 //----------------------------------------------------------------------------- 00153 template <typename T> 00154 VectorSet<T> & VectorSet<T>::operator-= ( VectorSet<T> const &v ) 00155 { 00156 assert( this->size() == v.size() ); 00157 for ( int i = 0; i < static_cast<int>(this->size()); ++ i ) 00158 (*this)[i] -= v[i]; 00159 return *this; 00160 } 00161 //----------------------------------------------------------------------------- 00162 template <typename T> 00163 VectorSet<T> & VectorSet<T>::operator*= ( VectorSet<T> const &v ) 00164 { 00165 assert( this->size() == v.size() ); 00166 for ( int i = 0; i < static_cast<int>(this->size()); ++ i ) 00167 (*this)[i] *= v[i]; 00168 return *this; 00169 } 00170 //----------------------------------------------------------------------------- 00171 template <typename T> 00172 VectorSet<T> & VectorSet<T>::operator/= ( VectorSet<T> const &v ) 00173 { 00174 assert( this->size() == v.size() ); 00175 for ( int i = 0; i < static_cast<int>(this->size()); ++ i ) 00176 (*this)[i] /= v[i]; 00177 return *this; 00178 } 00179 //----------------------------------------------------------------------------- 00180 template <typename T> 00181 VectorSet<T> & VectorSet<T>::operator*= ( T s ) 00182 { 00183 for ( int i = 0; i < static_cast<int>(this->size()); ++ i ) 00184 (*this)[i] *= s; 00185 return *this; 00186 } 00187 //----------------------------------------------------------------------------- 00188 template <typename T> 00189 VectorSet<T> & VectorSet<T>::operator/= ( T s ) 00190 { 00191 if ( s != Math<T>::ZERO ) 00192 for ( int i = 0; i < static_cast<int>(this->size()); ++ i ) 00193 (*this)[i] /= s; 00194 else 00195 for ( int i = 0; i < static_cast<int>(this->size()); ++ i ) 00196 (*this)[i] = Math<T>::INFINITY; 00197 return *this; 00198 } 00199 //----------------------------------------------------------------------------- 00200 //============================================================================= 00201 END_NAMESPACE_TAPs__Simulation 00202 //345678901234567890123456789012345678901234567890123456789012345678901234567890 00203 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8