![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsD1Array.cpp 00003 00004 Simple Data Structure (cpp file). 00005 00006 SUKITTI PUNAK (08/25/2008) 00007 ******************************************************************************/ 00008 #include "TAPsD1Array.hpp" 00009 // Using Inclusion Model (i.e. definitions are included in declarations) 00010 // (this name.cpp is included in name.hpp) 00011 // Each friend is defined directly inside its declaration. 00012 00013 BEGIN_NAMESPACE_TAPs__DS 00014 //============================================================================= 00015 //----------------------------------------------------------------------------- 00016 template <typename T> 00017 D1Array<T>::D1Array ( unsigned int size, unsigned int stride ) 00018 : m_atData( NULL), m_uiSize( size ), m_uiStride( stride ) 00019 { 00020 if ( size == 0 ) { 00021 std::cerr << "ERROR (D1Array Ctor): Size is less than one!" << std::endl; 00022 exit( -1 ); 00023 } 00024 if ( stride == 0 ) { 00025 std::cerr << "ERROR (D1Array Ctor): Stride is less than one!" << std::endl; 00026 exit( -1 ); 00027 } 00028 if ( !(m_atData = new T[size * stride]) ) { 00029 std::cerr << "ERROR (D1Array Ctor): Cannot allocate data for D1Array<" << typeid(T).name() 00030 << "> with size ("<< m_uiSize << ") and stride (" << m_uiStride << ")!" << std::endl; 00031 exit( -1 ); 00032 } 00033 } 00034 //----------------------------------------------------------------------------- 00035 template <typename T> 00036 D1Array<T>::~D1Array () 00037 { 00038 if ( m_atData ) { 00039 delete [] m_atData; 00040 } 00041 } 00042 //----------------------------------------------------------------------------- 00043 template <typename T> 00044 bool D1Array<T>::Resize ( unsigned int size, unsigned int stride ) 00045 { 00046 if ( size == 0 ) { 00047 std::cerr << "ERROR (D1Array Ctor): Size is less than one!" << std::endl; 00048 return false; 00049 } 00050 if ( stride == 0 ) { 00051 std::cerr << "ERROR (D1Array Ctor): Stride is less than one!" << std::endl; 00052 return false; 00053 } 00054 T * newArray = new T[size * stride]; 00055 if ( !newArray ) { 00056 std::cerr << "ERROR (D1Array Ctor): Cannot allocate data for D1Array<" << typeid(T).name() 00057 << "> with size ("<< m_uiSize << ") and stride (" << m_uiStride << ")!" << std::endl; 00058 return false; 00059 } 00060 unsigned int max = m_uiSize*m_uiStride; 00061 if ( max < size*stride ) max = size*stride; 00062 for ( unsigned int i = 0; i < max; ++i ) { 00063 newArray[i] = m_atData[i]; 00064 } 00065 delete [] m_atData; 00066 m_atData = newArray; 00067 m_uiSize = size; 00068 m_uiStride = stride; 00069 return true; 00070 } 00071 //----------------------------------------------------------------------------- 00072 template <typename T> 00073 std::string D1Array<T>::StrInfo () const 00074 { 00075 std::ostringstream ss; 00076 ss << "D1Array<" << typeid(T).name() << "> with size ("<< m_uiSize << ") and stride (" << m_uiStride << ")."; 00077 return ss.str(); 00078 } 00079 //----------------------------------------------------------------------------- 00080 template <typename T> 00081 std::string D1Array<T>::StrArrayData () const 00082 { 00083 std::ostringstream ss; 00084 ss << "D1Array<" << typeid(T).name() << "> with size ("<< m_uiSize << ") and stride (" << m_uiStride << ").\n"; 00085 ss << std::fixed; 00086 for ( unsigned int i = 0, p = 0; i < m_uiSize; ++i ) { 00087 ss << "\t# " << i << ":"; 00088 for ( unsigned int s = 0; s < m_uiStride; ++s ) { 00089 ss << "\t" << std::setprecision(6) << m_atData[p++]; 00090 } 00091 ss << "\n"; 00092 } 00093 return ss.str(); 00094 } 00095 //----------------------------------------------------------------------------- 00096 template <typename T> 00097 inline D1Array<T> & D1Array<T>::operator= ( D1Array<T> const & obj ) 00098 { 00099 if ( m_atData ) { 00100 delete [] m_atData; 00101 } 00102 m_uiSize = obj.m_uiSize; 00103 m_uiStride = obj.m_uiStride; 00104 if ( !m_atData = new T[size * stride] ) { 00105 std::cerr << "ERROR (D1Array Assignment Operator): Cannot allocate data for D1Array<" << typeid(T).name() 00106 << "> with size ("<< m_uiSize << ") and stride (" << m_uiStride << ")!" << std::endl; 00107 exit( -1 ); 00108 } 00109 return *this; 00110 } 00111 //----------------------------------------------------------------------------- 00112 //============================================================================= 00113 END_NAMESPACE_TAPs__DS 00114 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00115 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----