00001
00006 #include "TraffSpot.h"
00007
00014 TraffSpot::TraffSpot(){
00015 fahrzeugliste_ = 0;
00016 generatorliste_ = 0;
00017 kreuzungsliste_ = 0;
00018 spurenliste_ = 0;
00019 }
00020
00029 void TraffSpot::takt(){
00030
00031
00032 vergangeneZeit_ += taktZeit_;
00033 try{
00034 kreuzungsliste_->takt( taktZeit_ );
00035 fahrzeugliste_->takt( taktZeit_ );
00036 generatorliste_->takt( taktZeit_ );
00037 }
00038 catch( Fehler* fehler ){
00039 throw( fehler );
00040 }
00041 }
00042
00051 Liste *TraffSpot::gibFahrzeugliste(){
00052 return fahrzeugliste_;
00053 }
00054
00063 Liste *TraffSpot::gibGeneratorliste(){
00064 return generatorliste_;
00065 }
00066
00075 Liste *TraffSpot::gibKreuzungsliste(){
00076 return kreuzungsliste_;
00077 }
00078
00087 Spur **TraffSpot::gibSpurenliste(){
00088 return spurenliste_;
00089 }
00090
00099 void TraffSpot::setzeTaktzeit( double taktZeit ){
00100 if( taktZeit >= 0.001 && taktZeit <= 0.1 ){
00101 taktZeit_ = taktZeit;
00102 }
00103 else{
00104 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Taktzeit der TraffSpot darf sich nur in den Grenzen zwischen 0.001 und 0.1 s bewegen.");
00105 throw(fehler);
00106 }
00107
00108 }
00109
00119 void TraffSpot::initialisieren( string xmlDatei ){
00120 try{
00121 clear();
00122 xmlDatei_ = xmlDatei;
00123 oeffneXml();
00124 }
00125 catch( Fehler *fehler ){
00126 throw( fehler );
00127 }
00128 }
00129
00130
00139 void TraffSpot::setzeNamen( string traffSpotName ){
00140 traffSpotName_ = traffSpotName;
00141 }
00142
00153 void TraffSpot::erstelleStatistikUeberschriften( string cvsDateinameFahrzeuge, string cvsDateinameKreuzungen ){
00154 string dateiname = cvsDateinameFahrzeuge;
00155 ofstream cvsDatei;
00156 time_t zeitstempel;
00157 tm *aktuelleZeit;
00158 zeitstempel = time( 0 );
00159 aktuelleZeit = localtime( &zeitstempel );
00160
00161
00162 cvsDatei.open( dateiname.c_str(), ios::app );
00163 if( !cvsDatei ){
00164 Fehler *fehler = new Fehler( "Die CVS-Datei fuer Fahrzeuge konnte nicht geoeffnet werden.\n");
00165 fehler->ergaenzeMeldung( dateiname );
00166 throw(fehler);
00167 return;
00168 }
00169
00170
00171 cvsDatei << "\"TraffSpot:\";\"" << traffSpotName_ << "\";\"Dauer:\";\"" << vergangeneZeit_ << "\"" << endl;
00172 cvsDatei << "\"Fahrzeugstatistiken\";\"\";\"\";\"\"" << endl;
00173 cvsDatei << "\"Datum:\";\"" << aktuelleZeit->tm_mday << "." << (aktuelleZeit->tm_mon+1) << "." << aktuelleZeit->tm_year+1900 << "\";\"\";\"\"" << endl;
00174 cvsDatei << "\"Uhrzeit:\";\"" << aktuelleZeit->tm_hour << ":" << aktuelleZeit->tm_min << ":" << aktuelleZeit->tm_sec << "\";\"\";\"\"" << endl;
00175 cvsDatei << "\"Fahrezug-Id\";\"Typ\";\"Alter in s\";\"Kilometerstand in km\"" << endl;
00176
00177
00178 cvsDatei.close();
00179
00180 dateiname = cvsDateinameKreuzungen;
00181
00182 cvsDatei.open( dateiname.c_str(), ios::app );
00183 if( !cvsDatei ){
00184 Fehler *fehler = new Fehler( "Die CVS-Datei fuer Kreuzungen konnte nicht geoeffnet werden.\n");
00185 fehler->ergaenzeMeldung( dateiname );
00186 throw(fehler);
00187 return;
00188 }
00189
00190
00191 cvsDatei << "\"TraffSpot:\";\"" << traffSpotName_ << "\";\"Dauer:\";\"" << vergangeneZeit_ << "\";\"\";\"\"" << endl;
00192 cvsDatei << "\"Kreuzungsstatistiken\";\"\";\"\";\"\";\"\";\"\"" << endl;
00193 cvsDatei << "\"Datum:\";\"" << aktuelleZeit->tm_mday << "." << (aktuelleZeit->tm_mon+1) << "." << aktuelleZeit->tm_year+1900 << "\";\"\";\"\";\"\";\"\"" << endl;
00194 cvsDatei << "\"Uhrzeit:\";\"" << aktuelleZeit->tm_hour << ":" << aktuelleZeit->tm_min << ":" << aktuelleZeit->tm_sec << "\";\"\";\"\";\"\";\"\"" << endl;
00195
00196
00197 cvsDatei.close();
00198 }
00199
00200
00211 void TraffSpot::exportieren( string cvsDateinameFahrzeuge, string cvsDateinameKreuzungen ){
00212 try{
00213 erstelleStatistikUeberschriften( cvsDateinameFahrzeuge, cvsDateinameKreuzungen );
00214 kreuzungsliste_->exportieren( cvsDateinameKreuzungen );
00215 fahrzeugliste_->exportieren( cvsDateinameFahrzeuge );
00216 }
00217 catch( Fehler *fehler ){
00218 throw( fehler );
00219 }
00220 }
00221
00231 long int TraffSpot::gibAnzahlSpuren( ){
00232 return anzahlSpuren_;
00233 }
00234
00243 void TraffSpot::oeffneXml( ){
00244 try{
00245 SzenarioParser *parser = new SzenarioParser( (char *)xmlDatei_.c_str(), &spurenliste_, generatorliste_, kreuzungsliste_, fahrzeugliste_ );
00246 anzahlSpuren_ = parser->parseXml();
00247 delete parser;
00248 }
00249 catch( Fehler *fehler ){
00250 throw( fehler );
00251 }
00252 }
00253
00260 void TraffSpot::clear(){
00261
00262 if( fahrzeugliste_ != 0 ){
00263 delete fahrzeugliste_;
00264 }
00265 fahrzeugliste_ = new Liste();
00266
00267 if( generatorliste_ != 0 ){
00268 delete generatorliste_;
00269 }
00270 generatorliste_ = new Liste();
00271
00272 if( kreuzungsliste_ != 0 ){
00273 delete kreuzungsliste_;
00274 }
00275 kreuzungsliste_ = new Liste();
00276
00277
00278 if( spurenliste_ != 0 ){
00279 delete spurenliste_;
00280 }
00281 spurenliste_ = 0;
00282
00283 anzahlSpuren_ = 0;
00284 xmlDatei_ = "";
00285 traffSpotName_ = "unbenannt";
00286 taktZeit_ = 0.1;
00287 vergangeneZeit_ = 0;
00288 }