Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

array1d.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2001 The AUTHORS 
00003  *   Romeu Andre' Pieritz, Ph.D.        - romeu_pieritz@hotmail.com
00004  *   Rafael Mendes, Eng.                – mendes_rafael@yahoo.com
00005  *   Rodrigo Ferraz de Andrade, Eng.    – rferraz@iname.com 
00006  * All rights reserved.
00007  *
00008  * Permission to use, copy and distribute this software and its
00009  * documentation for educational and personal use, without fee is hereby granted, 
00010  * provided that the above copyright notice and the following
00011  * two paragraphs appear in all copies of this software.
00012  *
00013  * IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR
00014  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
00015  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS
00016  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00017  *
00018  * THE AUTHORS SPECIFICALLY DISCLAIMS ANY WARRANTIES,
00019  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
00020  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HERE UNDER IS
00021  * ON AN "AS IS" BASIS, AND THE AUTHORS HAVE NO OBLIGATION TO
00022  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
00023  *
00024  * SINMEC Lab. - CFD Sinflow Project - http://www.sinmec.ufsc.br/cfd
00025  */
00026 
00027 
00028 // File Define
00029 #ifndef __CSFL_SYS_MATH_ARRAY1D_H__
00030 #define __CSFL_SYS_MATH_ARRAY1D_H__
00031 
00032 
00033 // Include
00034 #include <csfl/sys/core/sflobject.h>
00035 
00036 
00037 // Namespace
00038 namespace csfl {
00039 
00040 
00041 
00042 template <class T>
00043 class IArray1D 
00044 
00048 
00049 {
00050 public:
00051 
00056         IArray1D( int _size, T * _data = NULL );
00057         IArray1D( IArray1D<T> * _a );
00058 
00059         ~IArray1D();
00060 
00062         inline virtual IArray1D<T> & operator =( const IArray1D<T> &_a );
00063 
00065     inline T & operator () ( int _x )  { return data[_x]; }
00066 
00068         inline T * Data() { return data; }
00069         
00071         inline int Size() { return size; }
00072 
00074         inline T Value( int _x ) { return data[_x]; }
00075 
00077     inline void SetValue( int _p, T _value );
00078 
00080     inline void AddValue( int _p, T _value );
00081 
00082 private:
00083         void AllocData();
00084         void FreeData();
00085         bool CopyData( T * );
00086 
00087 protected:
00088         int size;
00089         T *data;
00090 };
00091 
00092 // Template Class Methods Implementation 
00093 
00094 template <class T>
00095 IArray1D<T>::IArray1D( int _size, T *_data )
00096 {
00097         size = _size;
00098         AllocData();
00099         CopyData( _data );
00100 }
00101 
00102 template <class T>
00103 IArray1D<T>::IArray1D( IArray1D<T> *_a )
00104 {
00105         size = _a->size;
00106         AllocData();
00107         CopyData( _a->data );
00108 }
00109 
00110 template <class T>
00111 IArray1D<T>::~IArray1D()
00112 {
00113         FreeData();
00114 }
00115 
00116 template <class T>
00117 inline IArray1D<T> & IArray1D<T>::operator = ( const IArray1D<T> &_a )
00118 {
00119         if (size != _a.size) {
00120                 FreeData();
00121                 size = _a.size;
00122                 AllocData();
00123         }
00124         CopyData( _a.data );
00125                 
00126         return *this;
00127 }
00128 
00129 template <class T>
00130 inline void IArray1D<T>::AllocData()
00131 {
00132         data = new T [size];
00133 }
00134 
00135 template <class T>
00136 inline void IArray1D<T>::FreeData()
00137 {
00138         if (data) 
00139                 delete [] data;
00140 }
00141 
00142 template <class T>
00143 inline bool IArray1D<T>::CopyData( T *_data )
00144 {
00145         if (_data) {
00146         
00147                 memcpy( data, _data, sizeof( T )*size );
00148 
00149         return true;
00150         }
00151         else
00152                 return false;
00153 }
00154 
00155 template <class T>
00156 inline void IArray1D<T>::SetValue( int _p, T _value )
00157 {
00158         data[_p] = _value;
00159 }
00160 
00161 template <class T>
00162 inline void IArray1D<T>::AddValue( int _p, T _value )
00163 {
00164         data[_p] += _value;
00165 }
00166 
00167 } // csfl namespace
00168 
00169 #endif // __CSFL_SYS_MATH_ARRAY1D_H__
00170 

 

CFD Project | Documents | Downloads | Contact us | Use Terms

 

© SINMEC/EMC/UFSC, 2001.

All rights reserved.

Last Update: Jan. 18, 2002

 Webmaster