Details
Description
I want to show a sorted list of available Levels.
The sort routine uses Level.Compare(Level l, Level r).
The result might be wrong when comparing ALL to another Level, because there is an overflow when just subtracting the m_levelValue.
try to call the integer compare method:
Level.cs:
public static int Compare(Level l, Level r)
hope this helps.
best regards, Bernd.
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
The CompareTo fix seems ok. I suspect subtraction was a clever way to save some cpu cycles.
FYI, Mono uses < and > instead of subtraction:
http://svn.myrealbox.com/viewcvs/*checkout*/trunk/mcs/class/corlib/System/Int32.cs
int xv = (int) v;
if (m_value == xv)
return 0;
if (m_value > xv)
return 1;
else
return -1;
Another solution would be to add a comment to the Level constructor and throw an ArgumentException for level values less than zero. There are 10,000 positive numbers between 0 and the lowest built-in log4net Level.
Since we know the two items we're comparing are ints, I think the inlined if/if/else block might save some cycles over CompareTo.