KartenLeser.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include "KartenLeser.h"
  2. #include <Datei.h>
  3. // Inhalt der KartenLeser Klasse aus KartenLeser.h
  4. // Kontruktor
  5. KartenLeser::KartenLeser( int karteId, SSDatenbankV *db, char *mapPfad )
  6. {
  7. this->karteId = karteId;
  8. this->db = db;
  9. pfad = new Text( mapPfad );
  10. ref = 1;
  11. }
  12. // Destruktor
  13. KartenLeser::~KartenLeser()
  14. {
  15. db->release();
  16. if( pfad )
  17. pfad->release();
  18. }
  19. // nicht constant
  20. bool KartenLeser::ladeSpielerTeamStruktur( SpielerTeamStruktur *zSts )
  21. {
  22. if( !pfad )
  23. return 0;
  24. Text *pf = new Text( pfad->getText() );
  25. pf->append( "sts.ltgd" );
  26. Datei *datei = new Datei();
  27. datei->setDatei( pf );
  28. if( !datei->existiert() || datei->istOrdner() )
  29. {
  30. datei->release();
  31. return 0;
  32. }
  33. datei->open( Datei::Style::lesen );
  34. datei->lese( (char*)&zSts->spielerAnzahl, 4 );
  35. datei->lese( (char*)&zSts->teamAnzahl, 4 );
  36. if( zSts->spielerFarbe )
  37. zSts->spielerFarbe->release();
  38. zSts->spielerFarbe = new Array< int >();
  39. for( int i = 0; i < zSts->spielerAnzahl; i++ )
  40. {
  41. int farbe = 0;
  42. datei->lese( (char*)&farbe, 4 );
  43. zSts->spielerFarbe->set( farbe, i );
  44. }
  45. if( zSts->teamFarbe )
  46. zSts->teamFarbe->release();
  47. zSts->teamFarbe = new Array< int >();
  48. for( int i = 0; i < zSts->teamAnzahl; i++ )
  49. {
  50. int farbe = 0;
  51. datei->lese( (char*)&farbe, 4 );
  52. zSts->teamFarbe->set( farbe, i );
  53. }
  54. if( zSts->teamName )
  55. zSts->teamName->release();
  56. zSts->teamName = new RCArray< Text >();
  57. for( int i = 0; i < zSts->teamAnzahl; i++ )
  58. {
  59. char len = 0;
  60. datei->lese( &len, 1 );
  61. char *txt = new char[ len + 1 ];
  62. txt[ (int)len ] = 0;
  63. datei->lese( txt, len );
  64. Text *name = new Text( txt );
  65. delete[] txt;
  66. zSts->teamName->set( name, i );
  67. }
  68. if( zSts->teamSize )
  69. zSts->teamSize->release();
  70. zSts->teamSize = new Array< int >();
  71. for( int i = 0; i < zSts->teamAnzahl; i++ )
  72. {
  73. int size = 0;
  74. datei->lese( (char*)&size, 4 );
  75. zSts->teamSize->set( size, i );
  76. }
  77. datei->close();
  78. datei->release();
  79. return 1;
  80. }
  81. // constant
  82. int KartenLeser::getKarteId() const
  83. {
  84. return karteId;
  85. }
  86. Text *KartenLeser::getPfad() const
  87. {
  88. return pfad ? pfad->getThis() : 0;
  89. }
  90. Text *KartenLeser::zPfad() const
  91. {
  92. return pfad;
  93. }
  94. // Reference Counting
  95. KartenLeser *KartenLeser::getThis()
  96. {
  97. ref++;
  98. return this;
  99. }
  100. KartenLeser *KartenLeser::release()
  101. {
  102. ref--;
  103. if( !ref )
  104. delete this;
  105. return 0;
  106. }