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 |
|