public void compute()

in computer-algorithm/src/main/java/org/apache/hugegraph/computer/algorithm/community/kcore/Kcore.java [76:121]


    public void compute(ComputationContext context, Vertex vertex,
                        Iterator<Id> messages) {
        KcoreValue value = vertex.value();
        if (!value.active()) {
            // Ignore messages of deleted vertex
            vertex.inactivate();
            return;
        }

        int superstep = context.superstep();
        if (superstep <= 2) {
            int deleted = Iterators.size(messages);
            assert value.active();
            if (value.decreaseDegree(deleted) < this.k) {
                // From active to inactive, delete self vertex
                value.degree(0);
                if (superstep == 1) {
                    context.sendMessageToAllEdges(vertex, vertex.id());
                }
                vertex.inactivate();
            } else {
                // From active to active, do wcc from superstep 2
                if (superstep == 2) {
                    // Start wcc
                    context.sendMessageToAllEdgesIf(vertex, vertex.id(),
                                                    (source, target) -> {
                        return source.compareTo(target) < 0;
                    });
                    vertex.inactivate();
                } else {
                    // Keep active at superstep 1 to continue superstep 2
                    assert superstep == 1;
                    assert vertex.active();
                }
            }
        } else {
            // Do wcc
            assert superstep > 2;
            Id message = Combiner.combineAll(context.combiner(), messages);
            if (value.core().compareTo(message) > 0) {
                value.core(message);
                context.sendMessageToAllEdges(vertex, message);
            }
            vertex.inactivate();
        }
    }