in commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractBSPTree.java [374:414]
private boolean acceptRecursive(final N node, final BSPTreeVisitor<P, N> visitor) {
if (node.isLeaf()) {
return shouldContinueVisit(visitor.visit(node));
} else {
final BSPTreeVisitor.Order order = visitor.visitOrder(node);
if (order != null) {
switch (order) {
case PLUS_MINUS_NODE:
return acceptRecursive(node.getPlus(), visitor) &&
acceptRecursive(node.getMinus(), visitor) &&
shouldContinueVisit(visitor.visit(node));
case PLUS_NODE_MINUS:
return acceptRecursive(node.getPlus(), visitor) &&
shouldContinueVisit(visitor.visit(node)) &&
acceptRecursive(node.getMinus(), visitor);
case MINUS_PLUS_NODE:
return acceptRecursive(node.getMinus(), visitor) &&
acceptRecursive(node.getPlus(), visitor) &&
shouldContinueVisit(visitor.visit(node));
case MINUS_NODE_PLUS:
return acceptRecursive(node.getMinus(), visitor) &&
shouldContinueVisit(visitor.visit(node)) &&
acceptRecursive(node.getPlus(), visitor);
case NODE_PLUS_MINUS:
return shouldContinueVisit(visitor.visit(node)) &&
acceptRecursive(node.getPlus(), visitor) &&
acceptRecursive(node.getMinus(), visitor);
case NODE_MINUS_PLUS:
return shouldContinueVisit(visitor.visit(node)) &&
acceptRecursive(node.getMinus(), visitor) &&
acceptRecursive(node.getPlus(), visitor);
default: // NONE
break;
}
}
return true;
}
}