DynArray.hpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*****************************************************************************
  2. DynArray.hpp
  3. By Laurent de Soras
  4. --- Legal stuff ---
  5. This program is free software. It comes without any warranty, to
  6. the extent permitted by applicable law. You can redistribute it
  7. and/or modify it under the terms of the Do What The Fuck You Want
  8. To Public License, Version 2, as published by Sam Hocevar. See
  9. http://sam.zoy.org/wtfpl/COPYING for more details.
  10. *Tab=3***********************************************************************/
  11. #if defined (ffft_DynArray_CURRENT_CODEHEADER)
  12. #error Recursive inclusion of DynArray code header.
  13. #endif
  14. #define ffft_DynArray_CURRENT_CODEHEADER
  15. #if ! defined (ffft_DynArray_CODEHEADER_INCLUDED)
  16. #define ffft_DynArray_CODEHEADER_INCLUDED
  17. /*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
  18. #include <cassert>
  19. namespace ffft
  20. {
  21. /*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
  22. template <class T>
  23. DynArray <T>::DynArray ()
  24. : _data_ptr (0)
  25. , _len (0)
  26. {
  27. // Nothing
  28. }
  29. template <class T>
  30. DynArray <T>::DynArray (long size)
  31. : _data_ptr (0)
  32. , _len (0)
  33. {
  34. assert (size >= 0);
  35. if (size > 0)
  36. {
  37. _data_ptr = new DataType [size];
  38. _len = size;
  39. }
  40. }
  41. template <class T>
  42. DynArray <T>::~DynArray ()
  43. {
  44. delete [] _data_ptr;
  45. _data_ptr = 0;
  46. _len = 0;
  47. }
  48. template <class T>
  49. long DynArray <T>::size () const
  50. {
  51. return (_len);
  52. }
  53. template <class T>
  54. void DynArray <T>::resize (long size)
  55. {
  56. assert (size >= 0);
  57. if (size > 0)
  58. {
  59. DataType * old_data_ptr = _data_ptr;
  60. DataType * tmp_data_ptr = new DataType [size];
  61. _data_ptr = tmp_data_ptr;
  62. _len = size;
  63. delete [] old_data_ptr;
  64. }
  65. }
  66. template <class T>
  67. const typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos) const
  68. {
  69. assert (pos >= 0);
  70. assert (pos < _len);
  71. return (_data_ptr [pos]);
  72. }
  73. template <class T>
  74. typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos)
  75. {
  76. assert (pos >= 0);
  77. assert (pos < _len);
  78. return (_data_ptr [pos]);
  79. }
  80. /*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
  81. /*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
  82. } // namespace ffft
  83. #endif // ffft_DynArray_CODEHEADER_INCLUDED
  84. #undef ffft_DynArray_CURRENT_CODEHEADER
  85. /*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/