SzenarioParser.cpp

gehe zur Dokumentation dieser Datei
00001 
00006 #include "SzenarioParser.h"
00007 #include "StructureParser.h"
00008 
00009 #include "../Konstanten.h"
00010 #include "../Liste.h"
00011 #include "../Spur.h"
00012 #include "../Fehler.h"
00013 
00014 #include <qfile.h>
00015 #include <qxml.h>
00016 
00017 //------------------------------------------------------------------------------------------------------------------
00024 SzenarioParser::SzenarioParser()
00025 {
00026         // please do not use
00027 }
00028 //------------------------------------------------------------------------------------------------------------------
00029 
00030 
00031 
00032 //------------------------------------------------------------------------------------------------------------------
00045 SzenarioParser::SzenarioParser( char *file, Spur ***spurenArray, Liste *generatorListe, Liste *kreuzungsListe, Liste *fahrzeugeListe )
00046 {
00047                   file_ = file;
00048            spurenArrayTmp_ = spurenArray;
00049         generatorListe_ = generatorListe;               
00050         kreuzungsListe_ = kreuzungsListe;
00051         fahrzeugeListe_ = fahrzeugeListe;
00052 }
00053 //------------------------------------------------------------------------------------------------------------------
00054 
00055 
00056 
00057 //------------------------------------------------------------------------------------------------------------------
00068 int SzenarioParser::parseXml()
00069 {
00070         int anzahlSpuren;
00071         long int maxID, nextID;
00072         double  wahrschLinks = 0, wahrschMitte = 0, wahrschRechts = 0;
00073 
00074         // Anzahl der Spuren im XML-File feststellen
00075         anzahlSpuren = countXml();
00076 
00077         // groesste SpurenID fesstellen
00078         maxID = getXml();
00079 
00080 
00081         // Array aller Spuren in Lesereihenfolge
00082         *spurenArrayTmp_ = new Spur *[anzahlSpuren];
00083         spurenArray_ = *spurenArrayTmp_;
00084 
00085         
00086 
00087         // Hilfsarray der die Spuren im Spurenarray auffindbar macht
00088         long int *spurenPosition_;
00089         spurenPosition_ = new long int[maxID+1];
00090         
00091         for( int i=0; i<=maxID; i++ )
00092                 spurenPosition_[i] = -1;
00093         
00094         
00095         QFile xmlFile( file_ );
00096 
00097         if ( !xmlFile.exists() )
00098         {
00099                 Fehler *fehler = new Fehler("XML-Datei konnte nicht gefunden werden.");
00100                 throw( fehler );
00101         }
00102 
00103 
00104         // XML-Dokument parsen und Listen befuellen
00105         StructureParser  handler( spurenArray_, spurenPosition_, generatorListe_, kreuzungsListe_, fahrzeugeListe_ );
00106 
00107         QXmlInputSource source( &xmlFile );
00108         QXmlSimpleReader speichern;
00109         
00110         speichern.setContentHandler( &handler );
00111         try
00112         {
00113                 speichern.parse( source );
00114         }
00115         catch(Fehler *fehler)
00116         {
00117                 xmlFile.close();
00118                 throw( fehler);
00119         }
00120         
00121         xmlFile.close();
00122         
00123         // Spuren im Speicher organisieren
00124         for( int i = 0; i < anzahlSpuren; i++ )
00125         {
00126                 // gibt es einen Nachfolger, dann:
00127                 // ID des Nachfolgers besorgen und Spur als Nachfolger einhaengen
00128                 wahrschLinks = spurenArray_[ i ]->gibWahrscheinlichkeit( LINKS );
00129                 if( wahrschLinks != 0 )
00130                 {
00131                         try
00132                         {
00133                                 nextID = spurenArray_[ i ]->gibNachfolgerId( LINKS );
00134                         }
00135                         catch(Fehler *f)
00136                         {
00137                                 Fehler *fehler = new Fehler("Eine als Nachfolger deklarierte Spur ist in der XML-Datei nicht selbst definiert worden.");
00138                                 throw( fehler );
00139                         }
00140                         
00141                         spurenArray_[ i ]->setzeNaechstesVerbindungselement( spurenArray_[ spurenPosition_[nextID] ] , LINKS, wahrschLinks );
00142                 }
00143                 
00144                 wahrschMitte = spurenArray_[ i ]->gibWahrscheinlichkeit( MITTE );
00145                 if( wahrschMitte != 0 )
00146                 {
00147                         try
00148                         {
00149                                 nextID = spurenArray_[ i ]->gibNachfolgerId( MITTE );
00150                         }
00151                         catch(Fehler *f)
00152                         {
00153                                 Fehler *fehler = new Fehler("Eine als Nachfolger deklarierte Spur ist in der XML-Datei nicht selbst definiert worden.");
00154                                 throw( fehler );
00155                         }
00156 
00157                         spurenArray_[ i ]->setzeNaechstesVerbindungselement( spurenArray_[ spurenPosition_[nextID] ] , MITTE, wahrschMitte );
00158                 }
00159                 
00160                 wahrschRechts = spurenArray_[ i ]->gibWahrscheinlichkeit( RECHTS );
00161                 if( wahrschRechts != 0 )
00162                 {
00163                         try
00164                         {
00165                                 nextID = spurenArray_[ i ]->gibNachfolgerId( RECHTS );
00166                         }
00167                         catch(Fehler *f)
00168                         {
00169                                 Fehler *fehler = new Fehler("Eine als Nachfolger deklarierte Spur ist in der XML-Datei nicht selbst definiert worden.");
00170                                 throw( fehler );
00171                         }
00172                         spurenArray_[ i ]->setzeNaechstesVerbindungselement( spurenArray_[ spurenPosition_[nextID] ] , RECHTS, wahrschRechts );
00173                 }
00174         }
00175         
00176         return anzahlSpuren;
00177 }
00178 //------------------------------------------------------------------------------------------------------------------
00179 
00180 
00181 
00182 //------------------------------------------------------------------------------------------------------------------
00191 int SzenarioParser::countXml()
00192 {
00193         QFile xmlFile( file_ );
00194         
00195         StructureCounter counter;
00196         
00197         QXmlInputSource source( &xmlFile );
00198         QXmlSimpleReader zaehlen;       
00199         
00200         zaehlen.setContentHandler( &counter );
00201         zaehlen.parse( source );
00202         
00203         return counter.gibAnzahlSpuren();
00204 }
00205 //------------------------------------------------------------------------------------------------------------------
00206 
00207 
00208 
00209 //------------------------------------------------------------------------------------------------------------------
00218 long int SzenarioParser::getXml()
00219 {
00220         QFile xmlFile( file_ );
00221         
00222         StructureGetter getter;
00223         
00224         QXmlInputSource source( &xmlFile );
00225         QXmlSimpleReader idLeser;       
00226         
00227         idLeser.setContentHandler( &getter );
00228         idLeser.parse( source );
00229         
00230         return getter.gibMaxId();
00231 }
00232 //------------------------------------------------------------------------------------------------------------------

Erzeugt am Tue Jun 14 18:36:50 2005 für TraffSpot von  doxygen 1.3.9.1