Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #1 from mquinson/master
[simgrid.git] / contrib / psg / src / example / symphony / SymphonyNodeComparator.java
1 package example.symphony;\r
2 \r
3 import java.util.Comparator;\r
4 import java.util.logging.Level;\r
5 import java.util.logging.Logger;\r
6 import peersim.core.Node;\r
7 \r
8 /**\r
9  * Comparator that measure the relative distance from a target node\r
10  *\r
11  * @author Andrea Esposito <and1989@gmail.com>\r
12  */\r
13 public class SymphonyNodeComparator implements Comparator<Node> {\r
14 \r
15     private final int symphonyID;\r
16     private double target;\r
17 \r
18     public SymphonyNodeComparator(int symphonyID) {\r
19         this.symphonyID = symphonyID;\r
20     }\r
21 \r
22     public SymphonyNodeComparator(int symphonyID, double target) {\r
23         this(symphonyID);\r
24         this.target = target;\r
25     }\r
26 \r
27     public SymphonyNodeComparator(int symphonyID, Node targetNode) {\r
28         this(symphonyID);\r
29         SymphonyProtocol symphony = (SymphonyProtocol) targetNode.getProtocol(symphonyID);\r
30         this.target = symphony.getIdentifier();\r
31     }\r
32 \r
33     public int compare(Node o1, Node o2) {\r
34 \r
35         SymphonyProtocol symphony1 = (SymphonyProtocol) o1.getProtocol(symphonyID);\r
36         SymphonyProtocol symphony2 = (SymphonyProtocol) o2.getProtocol(symphonyID);\r
37 \r
38         Double identifier1 = symphony1.getIdentifier();\r
39         Double identifier2 = symphony2.getIdentifier();\r
40 \r
41         Double distance1 = Math.abs(target - identifier1) % 1;\r
42         Double distance2 = Math.abs(target - identifier2) % 1;\r
43 \r
44         identifier1 = Math.min(1.0 - distance1, distance1);\r
45         identifier2 = Math.min(1.0 - distance2, distance2);\r
46 \r
47         Logger.getLogger(SymphonyNodeComparator.class.getName()).log(Level.FINEST, "id1= " + symphony1.getIdentifier() + " target= " + target + " id2= " + symphony2.getIdentifier() + " res= " + identifier1.compareTo(identifier2));\r
48 \r
49         return identifier1.compareTo(identifier2);\r
50     }\r
51 }\r