#include "KartenLeser.h" #include #include "Karte.h" // Inhalt der KartenLeser Klasse aus KartenLeser.h // Kontruktor KartenLeser::KartenLeser( int karteId, SSDatenbankV *db, char *tmpPfad ) { this->karteId = karteId; this->db = db; pfad = new Text( tmpPfad ); ref = 1; } // Destruktor KartenLeser::~KartenLeser() { if( db ) db->release(); if( pfad ) pfad->release(); } // nicht constant bool KartenLeser::ladeSpielerTeamStruktur( SpielerTeamStruktur *zSts ) { if( !pfad ) return 0; Text *pf = new Text( pfad->getText() ); pf->append( "sts.ltgd" ); Datei *datei = new Datei(); datei->setDatei( pf ); if( !datei->existiert() || datei->istOrdner() ) { datei->release(); return 0; } datei->open( Datei::Style::lesen ); datei->lese( (char *)&zSts->spielerAnzahl, 4 ); datei->lese( (char *)&zSts->teamAnzahl, 4 ); if( zSts->spielerFarbe ) zSts->spielerFarbe->release(); zSts->spielerFarbe = new Array< int >(); for( int i = 0; i < zSts->spielerAnzahl; i++ ) { int farbe = 0; datei->lese( (char *)&farbe, 4 ); zSts->spielerFarbe->set( farbe, i ); } if( zSts->teamFarbe ) zSts->teamFarbe->release(); zSts->teamFarbe = new Array< int >(); for( int i = 0; i < zSts->teamAnzahl; i++ ) { int farbe = 0; datei->lese( (char *)&farbe, 4 ); zSts->teamFarbe->set( farbe, i ); } if( zSts->teamName ) zSts->teamName->release(); zSts->teamName = new RCArray< Text >(); for( int i = 0; i < zSts->teamAnzahl; i++ ) { char len = 0; datei->lese( &len, 1 ); char *txt = new char[ len + 1 ]; txt[ (int)len ] = 0; datei->lese( txt, len ); Text *name = new Text( txt ); delete[] txt; zSts->teamName->set( name, i ); } if( zSts->teamSize ) zSts->teamSize->release(); zSts->teamSize = new Array< int >(); for( int i = 0; i < zSts->teamAnzahl; i++ ) { int size = 0; datei->lese( (char *)&size, 4 ); zSts->teamSize->set( size, i ); } datei->close(); datei->release(); return 1; } Karte *KartenLeser::ladeKarte( SpielerTeamStruktur *zSts ) { if( !pfad ) return 0; Text *pf = new Text( pfad->getText() ); pf->append( "data.map" ); Datei *datei = new Datei(); datei->setDatei( pf ); if( !datei->existiert() || datei->istOrdner() ) { datei->release(); return 0; } datei->open( Datei::Style::lesen ); Karte *ret = new Karte(); ret->ladeDaten( datei, db, zSts, pfad->getText(), karteId ); datei->close(); datei->release(); return ret; } // constant int KartenLeser::getKarteId() const { return karteId; } Text *KartenLeser::getPfad() const { return pfad ? dynamic_cast( pfad->getThis() ) : 0; } Text *KartenLeser::zPfad() const { return pfad; } // Reference Counting KartenLeser *KartenLeser::getThis() { ref++; return this; } KartenLeser *KartenLeser::release() { ref--; if( !ref ) delete this; return 0; }