[ http://issues.apache.org/jira/browse/LOG4NET-95?page=comments#action_12437433 ] Ron Grabowski commented on LOG4NET-95: --------------------------------------
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. > Level.CompareTo() may result a wrong Value -> sorting of Levels does not work > ----------------------------------------------------------------------------- > > Key: LOG4NET-95 > URL: http://issues.apache.org/jira/browse/LOG4NET-95 > Project: Log4net > Issue Type: Bug > Components: Core > Affects Versions: 1.2.10 > Environment: VS2005 C# > Reporter: Bernd Klaiber > Priority: Minor > > 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) > { > ... > //orig: return l.m_levelValue - r.m_levelValue; -> > bug when int overflow > return l.m_levelValue.CompareTo(r.m_levelValue); > } > hope this helps. > best regards, Bernd. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
