public void compute()

in computer-algorithm/src/main/java/org/apache/hugegraph/computer/algorithm/path/rings/filter/RingsDetectionWithFilter.java [71:120]


    public void compute(ComputationContext context, Vertex vertex,
                        Iterator<RingsDetectionMessage> messages) {
        boolean halt = true;
        if (this.filter.filter(vertex)) {
            Id vertexId = vertex.id();
            while (messages.hasNext()) {
                halt = false;
                RingsDetectionMessage message = messages.next();
                IdList path = message.path();
                if (vertexId.equals(path.get(0))) {
                    // Use the smallest vertex record ring
                    boolean isMin = true;
                    for (int i = 0; i < path.size(); i++) {
                        Id pathVertexValue = path.get(i);
                        if (vertexId.compareTo(pathVertexValue) > 0) {
                            isMin = false;
                            break;
                        }
                    }
                    if (isMin) {
                        path.add(vertexId);
                        IdListList value = vertex.value();
                        value.add(path.copy());
                    }
                } else {
                    boolean contains = false;
                    // Drop sequence if path contains this vertex
                    for (int i = 0; i < path.size(); i++) {
                        Id pathVertexValue = path.get(i);
                        if (pathVertexValue.equals(vertex.id())) {
                            contains = true;
                            break;
                        }
                    }
                    if (!contains) {
                        path.add(vertex.id());
                        for (Edge edge : vertex.edges()) {
                            if (this.filter.filter(edge, message)) {
                                message.walkEdgeProp(edge.properties());
                                context.sendMessage(edge.targetId(), message);
                            }
                        }
                    }
                }
            }
        }
        if (halt) {
            vertex.inactivate();
        }
    }