P
Schade das deine Werte nicht regelmässiger liegen:
min newMin max newMax
-oldMin -oldMax
0 488
489 [b]489[/b] 976 488
977 488 1464 488
1465 488 1952 488
1953 488 2440 488
2441 488 2928 488
2929 488 3416 488
3417 488 3904 488
3905 488 4394 [b]490[/b]
4395 [b]490[/b] 4882 488
4883 488 5371 [b]489[/b]
5372 [b]489[/b] 5859 488
5860 488 6347 488
6348 488 6836 [b]489[/b]
6834 [b]486[/b] 7324 488
7325 [b]491[/b]
bool CTransitObserver::IsDelayErrorDetected(int *minDelay, int *maxDelay, char *counterValue) // wofür alles als pointer? Ein pointer ist meist genauso groß (evtl größer)
// wie ein int, sicher größer wie ein char - du sparst also nix.
// Da du nix änderst kannste auch über const nachdenken...
{
const unsigned int lookUpTable [2][16] =
{
{0, 489, 977, 1465, 1953, 2441, 2929, 3417, 3905, 4395, 4883, 5372, 5860, 6348, 6834, 7325},
{488 ,976 ,1464 ,1952 ,2440 ,2928 , 3416 ,3904 ,4394 ,4882 ,5371 ,5859 ,6347 ,6836 ,7324 ,60000}
};
unsigned int counter;
if(0) {} // zu einrückungszwecken :D
else if( *counterValue == 'A') { counter = 10; }
else if( *counterValue == 'B') { counter = 11; }
else if( *counterValue == 'C') { counter = 12; }
else if( *counterValue == 'D') { counter = 13; }
else if( *counterValue == 'E') { counter = 14; }
else if( *counterValue == 'F') { counter = 15; }
else { counter = atoi(counterValue); }; // unnötig, s.u. // atoi s.u.
// warum nicht:
switch (*counterValue)
{
case 'a': // statt toUpper, wenn immer ein Großbuchstabe kommt, egal
case 'A': counter=10; break;
case 'b':
case 'B': counter=11; break;
case 'c':
case 'C': counter=12; break;
case 'd':
case 'D': counter=13; break;
case 'e':
case 'E': counter=14; break;
case 'f':
case 'F': counter=15; break;
default : counter= *countervalue - '0'; // ziehe ASCII Wert von '0' von deinem char ab -> zufällig genau der Zahlenwert den du suchst
}
int lowerBound = lookUpTable[0][counter];
int upperBound = lookUpTable[1][counter];
/*
if ( (lowerBound >= *minDelay) && (upperBound <= *maxDelay) )
{
return false;
}
else
{
return true;
}; // das hier ist unnötig, da es eine (wegoptimierte) leere Anweisung bedeutet, die ganze else ist so unnötig, mE geschickter wäre s.u.
*/
if ( (lowerBound < *minDelay) && (upperBound > *maxDelay) )
{
return true;
}
return false; // so hat die Methode IMMER einen Rückkehrwert 'shudder' und das ist evtl eine Warnung weniger.
}
statt atoi: kann exceptions werfen, guck mal FAQ C++ Einmal Zahl nach String und zurück