From c50ebbef83f90992845050a9a2910d575c12318b Mon Sep 17 00:00:00 2001 From: firleju Date: Fri, 8 Jan 2016 16:21:13 +0100 Subject: [PATCH] Repair bug in clearing table after switch changing. --- Driver.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/Driver.cpp b/Driver.cpp index bf4d3b45..9947cddd 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -610,18 +610,22 @@ void TController::TableCheck(double fDistance) { if (sSpeedTable[i].Update(&pos, &dir, len)) { - WriteLog("TableCheck: Przestawiona zwrotnica. Kasowanie tableki."); - int k = (iLast + 1) % iSpeedTableSize; // skanujemy razem z ostatnią pozycją - for (int j = (i+1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize) + WriteLog("TableCheck: Switch change. Delete next entries. (" + + sSpeedTable[i].trTrack->NameGet() + ")"); + int k = (iLast + 1) % iSpeedTableSize; // skanujemy razem z ostatnią pozycją + for (int j = (i+1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize) { // kasowanie wszystkich rekordów za zmienioną zwrotnicą - //if (sSpeedTable[j].iFlags & spTrack) - // WriteLog("TableCheck: Switch change. Delete from table: " + sSpeedTable[j].trTrack->NameGet()); - //else if (sSpeedTable[j].iFlags & spEvent) - // WriteLog("TableCheck: Switch change. Delete from table: " + sSpeedTable[j].evEvent->asName); + if (sSpeedTable[j].iFlags & spTrack) + WriteLog("TableCheck: Delete from table: " + sSpeedTable[j].trTrack->NameGet()); + else if (sSpeedTable[j].iFlags & spEvent) + WriteLog("TableCheck: Delete from table: " + sSpeedTable[j].evEvent->asName); sSpeedTable[j].iFlags = 0; } - WriteLog("TableCheck: Kasowanie tableki OK."); - TablePurger(); + WriteLog("TableCheck: Delete entries OK."); + if (sSpeedTable[i].iFlags & spTrack) + WriteLog("TableCheck: New last element: " + sSpeedTable[i].trTrack->NameGet()); + else if (sSpeedTable[i].iFlags & spEvent) + WriteLog("TableCheck: New last element: " + sSpeedTable[i].evEvent->asName); iLast = i; // pokazujemy gdzie jest ostatni kawałek break; // nie kontynuujemy pętli, trzeba doskanować ciąg dalszy } @@ -629,7 +633,7 @@ void TController::TableCheck(double fDistance) { if (sSpeedTable[i].fDist < -fLength) // a skład wyjechał całą długością poza { // degradacja pozycji - WriteLog( "TableCheck: Track is behind. Delete from table: " + sSpeedTable[i].trTrack->NameGet()); + // WriteLog( "TableCheck: Track is behind. Delete from table: " + sSpeedTable[i].trTrack->NameGet()); sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy się } else if ((sSpeedTable[i].iFlags & 0xF0000028) == @@ -638,7 +642,7 @@ void TController::TableCheck(double fDistance) { sSpeedTable[i].iFlags = 0; // to nie ma go po co trzymać (odtykacz usunie ze środka) - WriteLog("TableCheck: Track without speed. Delete from table: " + sSpeedTable[i].trTrack->NameGet()); + // WriteLog("TableCheck: Track without speed. Delete from table: " + sSpeedTable[i].trTrack->NameGet()); } } else if (sSpeedTable[i].iFlags & spEvent) // jeśli event @@ -650,7 +654,7 @@ void TController::TableCheck(double fDistance) sSpeedTable[i].fDist < -fLength) { // pociąg staje zawsze, a samochód tylko jeśli nie przejedzie całą // długością (może być zaskoczony zmianą) - WriteLog("TableCheck: Event is behind. Delete from table: " + sSpeedTable[i].evEvent->asName); + // WriteLog("TableCheck: Event is behind. Delete from table: " + sSpeedTable[i].evEvent->asName); sSpeedTable[i].iFlags &= ~1; // degradacja pozycji dla samochodu; // semafory usuwane tylko przy sprawdzaniu, // bo wysyłają komendy