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