#include "KartenLeser.h" #include #include "Karte.h" // Inhalt der KartenLeser Klasse aus KartenLeser.h // Kontruktor KartenLeser::KartenLeser(int karteId, SSDatenbankV* db, const 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; }