summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java31
1 files changed, 31 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java b/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
index 5ee4200..03a1f93 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/funcdata/Tree.java
@@ -262,4 +262,35 @@ public class Tree<ContainedType> implements ITree<ContainedType> {
});
}
}
+
+ @Override
+ public ITree<ContainedType> topDownTransform(
+ Function<ContainedType, TopDownTransformResult> transformPicker,
+ UnaryOperator<ITree<ContainedType>> transformer) {
+ TopDownTransformResult transformResult =
+ transformPicker.apply(data);
+
+ switch (transformResult) {
+ case PASSTHROUGH:
+ ITree<ContainedType> result = new Tree<>(data);
+
+ if (hasChildren) {
+ children.forEach((child) -> {
+ result.addChild(child.topDownTransform(
+ transformPicker, transformer));
+ });
+ }
+
+ return result;
+ case SKIP:
+ return this;
+ case TRANSFORM:
+ return transformer.apply(this);
+ default:
+ throw new IllegalArgumentException(
+ "Recieved unknown transform result "
+ + transformResult);
+
+ }
+ }
}