public void compute()

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();
        }
    }