-
Notifications
You must be signed in to change notification settings - Fork 0
/
Route.java
82 lines (67 loc) · 2.02 KB
/
Route.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package bn;
import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.atomic.LongAdder;
import java.util.Comparator;
public class Route {
private static Random random = new Random();
private int source;
private int destination;
private int routeLength;
private LongAdder usage;
private ArrayList<Integer> viaNodes = new ArrayList<Integer>();
private static Comparator<Route> descendingLengthComparator = new Comparator<Route>() {
@Override
public int compare(Route rt1, Route rt2) {
return rt2.getRouteLength() - rt1.getRouteLength();
}
};
private static Comparator<Route> descendingReductionComparator = new Comparator<Route>() {
@Override
public int compare(Route rt1, Route rt2) {
return rt2.getRouteReductionRate() - rt1.getRouteReductionRate();
}
};
public Route(int src, int dest, int length, int viaNode) {
// shortest found Route
source = src;
destination = dest;
routeLength = length;
usage = new LongAdder();
viaNodes.add(viaNode);
}
public int getDestination() {
return destination;
}
public static Comparator<Route> getDescendingLengthComparator() {
return descendingLengthComparator;
}
public static Comparator<Route> getDescendingReductionComparator() {
return descendingReductionComparator;
}
public int getRouteReductionRate() {
return (routeLength - 1) * usage.intValue();
}
public void used() {
usage.increment();
}
public void resetUsage() {
usage.reset();
}
public int getRouteLength() {
return routeLength;
}
public void addViaNode(int viaNode) {
// Same-length route found
if (viaNodes.indexOf(viaNode) < 0) {
viaNodes.add(viaNode);
}
}
public Integer getRandomViaNode() {
int i = random.nextInt(viaNodes.size());
return viaNodes.get(i);
}
public String toString() {
return ("Route#" + destination + " < Node#" + source + " *--|" + routeLength + "|--> Node#" + destination + " via Nodes " + viaNodes.toString() + " >");
}
}