DynArray.hpp (2550B)
1 /***************************************************************************** 2 3 DynArray.hpp 4 By Laurent de Soras 5 6 --- Legal stuff --- 7 8 This program is free software. It comes without any warranty, to 9 the extent permitted by applicable law. You can redistribute it 10 and/or modify it under the terms of the Do What The Fuck You Want 11 To Public License, Version 2, as published by Sam Hocevar. See 12 http://sam.zoy.org/wtfpl/COPYING for more details. 13 14 *Tab=3***********************************************************************/ 15 16 17 18 #if defined (ffft_DynArray_CURRENT_CODEHEADER) 19 #error Recursive inclusion of DynArray code header. 20 #endif 21 #define ffft_DynArray_CURRENT_CODEHEADER 22 23 #if ! defined (ffft_DynArray_CODEHEADER_INCLUDED) 24 #define ffft_DynArray_CODEHEADER_INCLUDED 25 26 27 28 /*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ 29 30 #include <cassert> 31 32 33 34 namespace ffft 35 { 36 37 38 39 /*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ 40 41 42 43 template <class T> 44 DynArray <T>::DynArray () 45 : _data_ptr (0) 46 , _len (0) 47 { 48 // Nothing 49 } 50 51 52 53 template <class T> 54 DynArray <T>::DynArray (long size) 55 : _data_ptr (0) 56 , _len (0) 57 { 58 assert (size >= 0); 59 if (size > 0) 60 { 61 _data_ptr = new DataType [size]; 62 _len = size; 63 } 64 } 65 66 67 68 template <class T> 69 DynArray <T>::~DynArray () 70 { 71 delete [] _data_ptr; 72 _data_ptr = 0; 73 _len = 0; 74 } 75 76 77 78 template <class T> 79 long DynArray <T>::size () const 80 { 81 return (_len); 82 } 83 84 85 86 template <class T> 87 void DynArray <T>::resize (long size) 88 { 89 assert (size >= 0); 90 if (size > 0) 91 { 92 DataType * old_data_ptr = _data_ptr; 93 DataType * tmp_data_ptr = new DataType [size]; 94 95 _data_ptr = tmp_data_ptr; 96 _len = size; 97 98 delete [] old_data_ptr; 99 } 100 } 101 102 103 104 template <class T> 105 const typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos) const 106 { 107 assert (pos >= 0); 108 assert (pos < _len); 109 110 return (_data_ptr [pos]); 111 } 112 113 114 115 template <class T> 116 typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos) 117 { 118 assert (pos >= 0); 119 assert (pos < _len); 120 121 return (_data_ptr [pos]); 122 } 123 124 125 126 /*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ 127 128 129 130 /*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ 131 132 133 134 } // namespace ffft 135 136 137 138 #endif // ffft_DynArray_CODEHEADER_INCLUDED 139 140 #undef ffft_DynArray_CURRENT_CODEHEADER 141 142 143 144 /*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/