Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

SimpleArrayData.hh

Go to the documentation of this file.
00001 #ifndef SIMPLEARRAYDATA
00002 #define SIMPLEARRAYDATA
00003 
00004 
00014 #include "IotrRefCount.hh"
00015 #include "IotrHandle.hh"
00016 
00029 template<typename T>
00030 class SimpleArrayDataT: public IotrRefCount {
00031 protected:
00033   int mNeverDelete;
00035   int mSize;
00037   T * mArray;
00038 
00039   SimpleArrayDataT() {}; // Cannot be called.
00040 
00041 public:
00045   SimpleArrayDataT( T * array, int length )
00046   {
00047     mArray = array;
00048     mSize = length;
00049     mNeverDelete = 1;
00050   };
00054   SimpleArrayDataT( int length ) : mNeverDelete( 0 ), mSize( length )
00055   {
00056     assert( length >= 0 );
00057 
00058     int asize = mSize > 0 ? mSize : 1;
00059 
00060     mArray = new T[asize];
00061   };
00063   ~SimpleArrayDataT()
00064   {
00065     if( !mNeverDelete ) {
00066       delete [] mArray;
00067     }
00068   };
00069   bool operator==( const SimpleArrayDataT<T> & w ) const
00070   {
00071     assert( mSize == w.mSize );
00072     if( mSize != w.mSize ) return false;
00073     T * wa = w.mArray;
00074     for( int i = 0; i < mSize; i++ ) {
00075       if( mArray[i] != wa[i] ) return false;
00076     }
00077     return true;
00078   }
00079   bool operator!=( const SimpleArrayDataT<T> & w ) const
00080   {
00081     return !(*this == w );
00082   }
00084   int size() const { return mSize; };
00086   T * array() { return mArray; };
00087   const T * array() const { return mArray; };
00088   T & operator[]( int i ) {
00089 #if defined (CHECK_ARRAY_BOUNDS) || defined (IOTRINTENSEDEBUG)
00090     assert( i >= 0 && i < mSize );
00091 #endif
00092     return mArray[i];
00093   }
00095   const T & operator[]( int i ) const
00096   {
00097 #if defined (CHECK_ARRAY_BOUNDS) || defined (IOTRINTENSEDEBUG)
00098     assert( i >= 0 && i < mSize );
00099 #endif
00100     return mArray[i];
00101   }
00102 
00103 };
00104 
00105 typedef SimpleArrayDataT<double> SimpleArrayData;
00106 typedef Handle<SimpleArrayData> SimpleArrayDataHandle;
00107 
00108 #endif

Generated on Wed Aug 27 10:03:41 2003 for iotr by doxygen1.2.18