in computer-algorithm/src/main/java/org/apache/hugegraph/computer/algorithm/centrality/closeness/ClosenessCentrality.java [91:124]
public void compute(ComputationContext context, Vertex vertex,
Iterator<ClosenessMessage> messages) {
Id selfId = vertex.id();
// Save the distance from other vertices to self
ClosenessValue localValue = vertex.value();
boolean active = false;
while (messages.hasNext()) {
active = true;
ClosenessMessage message = messages.next();
Id senderId = message.senderId();
// In theory, it won't happen, defensive programming
if (selfId.equals(senderId)) {
continue;
}
Id startId = message.startId();
if (selfId.equals(startId)) {
continue;
}
DoubleValue oldValue = localValue.get(startId);
DoubleValue newValue = message.distance();
// If the id already exists and the new value >= old value, skip it
if (oldValue != null && newValue.compareTo(oldValue) >= 0) {
continue;
}
// Update local saved values (take smaller value)
localValue.put(startId, newValue);
// Send this smaller value to neighbors
this.sendMessage(context, vertex, senderId, startId, newValue);
}
if (!active) {
vertex.inactivate();
}
}