Spur.cpp

gehe zur Dokumentation dieser Datei
00001 
00006 #include "Fehler.h"
00007 #include "Konstanten.h"
00008 #include "Spur.h"
00009 class Fahrzeug;
00010 
00017 Spur::Spur( ){
00018         clear();
00019 }
00020 
00021 
00032 Spur::Spur( long int id, double laenge, int maximalGeschwindigkeit){
00033         clear();
00034         id_ = id;
00035         laenge_ = laenge;
00036         maximalGeschwindigkeit_ = maximalGeschwindigkeit;       
00037 }
00038 
00039 
00048 int Spur::gibAnzahlFahrzeuge( ){
00049         return anzahlFahrzeuge_;
00050 }
00051 
00062 int Spur::gibAnzahlAbgefahrenerFahrzeuge( int typ ){
00063         int anzahl;
00064         if( typ > 0 && typ < 5 ){
00065                 anzahl = statistik_[typ-1];     
00066                 statistik_[typ-1] = 0;
00067         }
00068         else if( typ == 0 ){
00069                 anzahl = statistik_[0] + statistik_[1] + statistik_[2] + statistik_[3];
00070                 statistik_[0] = 0;
00071                 statistik_[1] = 0;
00072                 statistik_[2] = 0;
00073                 statistik_[3] = 0;
00074         }
00075         else{
00076                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDer Typ eines Fahrzeuges liegt ausserhalb der Grenzen.");
00077                 throw(fehler);
00078         }
00079 
00080         return anzahl;
00081 }
00082 
00093 int Spur::gibEndzustand( ){
00094         return endzustand_;
00095 }
00096 
00097 
00109 void Spur::setzeEndzustand(int zustand){
00110         if( zustand >= 0 && zustand < 4 ){
00111                 endzustand_ = zustand;
00112         }
00113         else{
00114                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDas Endeflag fuer eine Spur einspricht nicht den Vorgaben.");
00115                 throw(fehler);
00116         }
00117 }
00118 
00119 
00120 
00132 void Spur::setzeNaechstesVerbindungselement(Spur *spur, int richtung, double wahrscheinlichkeit){
00133         if( richtung > 0 && richtung < 4 && wahrscheinlichkeit <= 1 && wahrscheinlichkeit >= 0 ){
00134                 spur_[richtung-1] = spur;
00135                 wahrscheinlichkeit_[richtung-1] = wahrscheinlichkeit;
00136                 spur->setzeAbbiegerichtung( richtung );
00137                 setzeGruen();
00138         }
00139         else{
00140                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Wahrscheinlichkeit fuer eine nicht existierende Richtung sollte gesetzt werden.");
00141                 throw(fehler);
00142         }
00143 }
00144 
00145 
00158 double Spur::gibWahrscheinlichkeit(int richtung){
00159         if( richtung > 0 && richtung < 4 ){
00160                 return wahrscheinlichkeit_[richtung-1];
00161         }
00162         else{
00163                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Wahrscheinlichkeit fuer eine nicht existierende Richtung wurde abgefragt.");
00164                 throw(fehler);
00165         }
00166         return 0;
00167 }
00168 
00169 
00179 void Spur::anmelden(Fahrzeug *fahrzeug){
00180         if( anzahlFahrzeuge_ < 1000){
00181                 fahrzeugListe_[anzahlFahrzeuge_] = fahrzeug;
00182                 anzahlFahrzeuge_++;
00183         }
00184         else{
00185                 Fehler  *fehler = new Fehler("Auf einer Spur befinden sich mehr als 1000 Fahrzeuge.");
00186                 throw( fehler );
00187         }
00188 }
00189 
00190 
00200 void Spur::abmelden(Fahrzeug *fahrzeug){
00201         int position(0), i(0);
00202 
00203         // Eigentlich ist das Fahrzeug welches sich abmeldet immer das erste --> Ueberpruefen
00204         if( fahrzeugListe_[0] != 0 && fahrzeugListe_[0]->gibId() == fahrzeug->gibId() ){
00205                 position = 0;
00206         }
00207         else{
00208                 // Sonst das Fahrzeug in der Liste suchen und die Position merken
00209                 for( position = 0; position < 1000; position++){
00210                         if( fahrzeugListe_[position] != 0 && fahrzeugListe_[position]->gibId() == fahrzeug->gibId() ){
00211                                 break;
00212                         }
00213                 }
00214                 // Kommt das Programm hier an, dann gibt es das Fahrzeug nicht
00215                 Fehler  *fehler = new Fehler("Aus einer Spur soll ein dort nicht befindliches Fahrzeug geloescht werden.");
00216                 throw( fehler );
00217         }
00218 
00219         // Alle nach dem abzumeldenden Fahrzeug um eins nach vorn schieben
00220         for( i = position; i < 999; i++ ){
00221                 fahrzeugListe_[i] = fahrzeugListe_[i+1];
00222         }
00223         fahrzeugListe_[999] = 0;
00224 
00225         anzahlFahrzeuge_--;
00226 
00227         // das Fahrzeug in die Statistiken aufnehmen
00228         statistik_[fahrzeug->gibTyp()-1]++;
00229 }
00230 
00231 
00240 double Spur::gibLaenge(){
00241         return laenge_;
00242 }
00243 
00253 Fahrzeug* Spur::gibVorgaenger(Fahrzeug *fahrzeug){
00254         int position(0);
00255 
00256         for( position = 0; position < anzahlFahrzeuge_; position++){
00257                 if( fahrzeugListe_[position]->gibId() == fahrzeug->gibId() ){
00258                         if( position > 0 ){
00259                                 return fahrzeugListe_[position-1];
00260                         }
00261                 }
00262         }
00263 
00264         return 0;
00265 }
00266 
00275 Fahrzeug* Spur::gibLetztes(){
00276         if( anzahlFahrzeuge_ > 1 ){
00277                 return fahrzeugListe_[anzahlFahrzeuge_-1];
00278         }
00279         else{
00280                 return 0;
00281         }
00282 }
00283 
00292 long int Spur::gibId(){
00293         return id_;
00294 }
00295 
00296 
00306 Spur *Spur::gibNaechsteSpur(int richtung){
00307         if( richtung > 0 && richtung < 4 && spur_[richtung-1] != 0 ){
00308                 return spur_[richtung-1];
00309         }
00310         else{
00311                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie gewuenschte Spur existiert nicht.");
00312                 throw(fehler);
00313         }
00314 }
00315 
00316 
00325 double Spur::gibMaximaleGeschwindigkeit(){
00326         return maximalGeschwindigkeit_;
00327 }
00328 
00329 
00336 void Spur::clear(){
00337         int i(0);
00338         for( i=0; i<1000; i++){
00339                 fahrzeugListe_[i] = 0;
00340         }
00341         for( i = 0; i<4; i++ ){
00342                 statistik_[i] = 0;
00343         }
00344 
00345         wahrscheinlichkeit_[0] = 0;
00346         wahrscheinlichkeit_[1] = 0;
00347         wahrscheinlichkeit_[2] = 0;
00348         spur_[0] = 0;
00349         spur_[1] = 0;
00350         spur_[2] = 0;
00351         nachfolger_[0] = 0;
00352         nachfolger_[1] = 0;
00353         nachfolger_[2] = 0;
00354         maximalGeschwindigkeit_ = 50;
00355         laenge_ = 300;
00356         endzustand_ = STOP;             // immer erst einmal auf eine Sackgasse setzen
00357         anzahlFahrzeuge_ = 0;
00358         abbiegerichtung_ = NICHTS;
00359         richtung_ = MITTE;
00360 }
00361 
00362 
00369 void Spur::setzeGruen(){
00370         setzeEndzustand(GRUEN);
00371 }
00372 
00373 
00380 void Spur::setzeGelb(){
00381         setzeEndzustand(GELB);
00382 }
00383 
00384 
00391 void Spur::setzeRot(){
00392         setzeEndzustand(ROT);
00393 }
00394 
00395 
00402 void Spur::setzeSackgasse(){
00403         setzeEndzustand(STOP);
00404 }
00405 
00406 
00415 bool Spur::istGruen(){
00416         if( gibEndzustand() == GRUEN )
00417                 return 1;
00418         else
00419                 return 0;
00420 }
00421 
00422 
00431 bool Spur::istGelb(){
00432         if( gibEndzustand() == GELB )
00433                 return 1;
00434         else
00435                 return 0;
00436 }
00437 
00438 
00447 bool Spur::istRot(){
00448         if( gibEndzustand() == ROT )
00449                 return 1;
00450         else
00451                 return 0;
00452 }
00453 
00454 
00463 bool Spur::istSackgasse(){
00464         if( gibEndzustand() == STOP )
00465                 return 1;
00466         else
00467                 return 0;
00468 }
00469 
00478 Koordinaten Spur::gibKoordinaten(){
00479         return koordinaten_;
00480 }
00481 
00490 void Spur::setzeKoordinaten( Koordinaten koordinaten ){
00491         koordinaten_ = koordinaten;
00492 }
00493 
00502 int Spur::gibAusrichtung(){
00503         return ausrichtung_;
00504 }
00505 
00514 void Spur::setzeAusrichtung( int ausrichtung ){
00515         ausrichtung_ = ausrichtung;
00516 }
00517 
00526 int Spur::gibRichtung(){
00527         return richtung_;
00528 }
00529 
00538 void Spur::setzeRichtung( int richtung ){
00539         richtung_ = richtung;
00540 }
00541 
00550 int Spur::gibAbbiegerichtung(){
00551         return abbiegerichtung_;
00552 }
00553 
00563 void Spur::setzeAbbiegerichtung( int abbiegerichtung ){
00564         if( abbiegerichtung > 0 && abbiegerichtung < 4){
00565                 abbiegerichtung_ = abbiegerichtung;
00566         }
00567         else{
00568                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nEs soll eine Abbiegerichtung gesetzt werden, die nicht moeglich ist.");
00569                 throw(fehler);
00570         }
00571         
00572 }
00573 
00583 long int Spur::gibNachfolgerId(int richtung){
00584         if( richtung > 0 && richtung < 4 && nachfolger_[richtung-1] != 0){
00585                 return nachfolger_[richtung-1];
00586         }
00587         else{
00588                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Richtung eines Nachfolgers ist ausserhalb der zulaessigen Parameter.");
00589                 throw(fehler);
00590         }
00591 }
00592 
00604 void Spur::setzeNaechstesVerbindungselement(int richtung, long int id, double wahrscheinlichkeit){
00605         if( richtung > 0 && richtung < 4 && wahrscheinlichkeit <= 1 && wahrscheinlichkeit >= 0 ){
00606                 nachfolger_[richtung-1] = id;
00607                 wahrscheinlichkeit_[richtung-1] = wahrscheinlichkeit;
00608         }
00609         else{
00610                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Richtung eines Nachfolgers ist ausserhalb der zulaessigen Parameter.");
00611                 throw(fehler);
00612         }
00613 }
00614 
00621 ostream &operator<< ( ostream &os, Spur *spur ){
00622         os << "----------Spur----------" << endl;
00623         os << "ID:                   " << spur->id_ << endl;
00624         os << "Endzustand:           " << spur->endzustand_ << "( 1 = gruen | 2 = gelb | 3 = rot | 0 = sackgasse )" << endl;
00625         os << "Laenge:               " << spur->laenge_ << " m" << endl;
00626         os << "max. Geschwindigkeit: " << spur->maximalGeschwindigkeit_ << " km/h" << endl;
00627         os << "p fuer links:         " << spur->wahrscheinlichkeit_[0] << endl;
00628         os << "p fuer gerade:        " << spur->wahrscheinlichkeit_[1] << endl;
00629         os << "p fuer rechts:        " << spur->wahrscheinlichkeit_[2] << endl;
00630         os << "Anzahl Fahrzeuge:     " << spur->anzahlFahrzeuge_ << endl;
00631         return os;
00632 }

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