DreieckListe.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #ifndef DreieckListe_H
  2. #define DreieckListe_H
  3. #include "Punkt.h"
  4. #include "Array.h"
  5. namespace Framework
  6. {
  7. template< typename T >
  8. struct DreieckPunkt
  9. {
  10. T *punkt;
  11. Punkt *textur;
  12. // Konstruktor
  13. DreieckPunkt( T *punkt, Punkt *textur )
  14. {
  15. this->punkt = punkt;
  16. this->textur = textur;
  17. }
  18. // Destruktor
  19. ~DreieckPunkt()
  20. {
  21. delete punkt;
  22. delete textur;
  23. }
  24. };
  25. template< typename T >
  26. class DreieckListe
  27. {
  28. private:
  29. Array< DreieckPunkt< T >* > *punkte;
  30. int ref;
  31. public:
  32. // Konstruktor
  33. DreieckListe()
  34. {
  35. ref = 1;
  36. punkte = new Array< DreieckPunkt< T >* >();
  37. }
  38. // Destruktor
  39. ~DreieckListe()
  40. {
  41. int anz = punkte->getEintragAnzahl();
  42. for( int i = 0; i < anz; i++ )
  43. delete punkte->get( i );
  44. punkte->release();
  45. }
  46. // nicht constant
  47. void addPunkt( T *p, Punkt *textur )
  48. {
  49. punkte->add( new DreieckPunkt< T >( p, textur ) );
  50. }
  51. void löscheLetztenPunkt()
  52. {
  53. int i = punkte->getEintragAnzahl() - 1;
  54. if( !punkte->hat( i ) )
  55. return;
  56. delete punkte->get( i );
  57. punkte->lösche( i );
  58. }
  59. void lehren()
  60. {
  61. int anz = punkte->getEintragAnzahl();
  62. for( int i = 0; i < anz; i++ )
  63. delete punkte->get( i );
  64. punkte->leeren();
  65. }
  66. // constant
  67. int getDreieckAnzahl() const
  68. {
  69. return punkte->getEintragAnzahl() - 2;
  70. }
  71. bool hatTextur() const
  72. {
  73. int anz = punkte->getEintragAnzahl();
  74. bool ret = 1;
  75. for( int i = 0; i < anz; i++ )
  76. {
  77. if( punkte->hat( i ) )
  78. ret &= punkte->get( i )->textur;
  79. }
  80. return ret;
  81. }
  82. Array< DreieckPunkt< T >* > *zListe() const
  83. {
  84. return punkte;
  85. }
  86. // Reference Counting
  87. DreieckListe *getThis()
  88. {
  89. ref++;
  90. return this;
  91. }
  92. DreieckListe *release()
  93. {
  94. ref--;
  95. if( !ref )
  96. delete this;
  97. return 0;
  98. }
  99. };
  100. }
  101. #endif