<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Hi Brian,<br><br>thanks for the patch. If I got it right, the compareTo() methid is obsolete<br>as we do no longer sort RoadDef instances anywhere. So,<br>it would be easier to remove the Comparable attribute from the class<br>public class RoadDef /*implements Comparable&lt;RoadDef&gt;*/ {<br>and remove the compareTo() method.<br><br>You are right regarding the hashCode() method, but I think<br>we should not use the fields id + name to implement it.<br>A style may add the same OSM way as a routable line multiple times,<br>in that case these two fields are equal.<br><br>A typical map has less than 100.000 RoadDef instances, so I see no problem<br>to add an int (or long) field like roadId which is filled with a unique value<br>and use that in hashCode().<br>What do you think?<br><br>Gerd<br><br><div>From: brianegge@gmail.com<br>Date: Wed, 5 Nov 2014 22:28:38 -0500<br>To: mkgmap-dev@lists.mkgmap.org.uk<br>Subject: [mkgmap-dev] RoadDef patch<br><br><pre>I’m not sure what the concurrency issue is related to this class, but it seems to have some problems around equality. First, it’s being used in a HashMap, which means both equals and hashCode need to be implemented. Second, the compareTo was using an unimplemented hashCode, which results in random sorting and inability to find two identical objects. <br> <br>I’m not sure I understand all the details of what RoadDef does, but I’ve fixed up the basic methods in the class to be consistent and added a test case around those methods. <br> <br></pre><br>Brian<br>_______________________________________________
mkgmap-dev mailing list
mkgmap-dev@lists.mkgmap.org.uk
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev</div>                                               </div></body>
</html>