summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/funcutils/TreeUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/funcutils/TreeUtils.java')
-rw-r--r--base/src/main/java/bjc/utils/funcutils/TreeUtils.java73
1 files changed, 37 insertions, 36 deletions
diff --git a/base/src/main/java/bjc/utils/funcutils/TreeUtils.java b/base/src/main/java/bjc/utils/funcutils/TreeUtils.java
index daab8a1..22c4d3c 100644
--- a/base/src/main/java/bjc/utils/funcutils/TreeUtils.java
+++ b/base/src/main/java/bjc/utils/funcutils/TreeUtils.java
@@ -6,18 +6,22 @@ import java.util.function.*;
import bjc.data.*;
import bjc.funcdata.*;
-/** Implements various utilities for trees.
+/**
+ * Implements various utilities for trees.
*
- * @author Benjamin Culkin */
+ * @author Benjamin Culkin
+ */
public class TreeUtils {
- /** Convert a tree into a list of outline nodes that match a certain path.
+ /**
+ * Convert a tree into a list of outline nodes that match a certain path.
*
- * @param <T> The type contained in the tree.
+ * @param <T> The type contained in the tree.
*
- * @param tre The tree to outline.
+ * @param tre The tree to outline.
* @param leafMarker The path to mark nodes with.
*
- * @return The list of marked paths. */
+ * @return The list of marked paths.
+ */
public static <T> ListEx<ListEx<T>> outlineTree(Tree<T> tre, Predicate<T> leafMarker) {
ListEx<ListEx<T>> paths = new FunctionalList<>();
@@ -30,13 +34,14 @@ public class TreeUtils {
}
/* Find a path in a tree. */
- private static <T> void findPath(Tree<T> subtree, LinkedList<T> path,
- Predicate<T> leafMarker, ListEx<ListEx<T>> paths) {
+ private static <T> void findPath(Tree<T> subtree, LinkedList<T> path, Predicate<T> leafMarker,
+ ListEx<ListEx<T>> paths) {
if (subtree.getChildrenCount() == 0 && leafMarker.test(subtree.getHead())) {
/* We're at a matching leaf node. Add it. */
ListEx<T> finalPath = new FunctionalList<>();
- for (T ePath : path) finalPath.add(ePath);
+ for (T ePath : path)
+ finalPath.add(ePath);
finalPath.add(subtree.getHead());
@@ -50,43 +55,39 @@ public class TreeUtils {
path.removeLast();
}
}
-
- /** Performs 'variable substitution' or something along those lines on a tree.
+
+ /**
+ * Performs 'variable substitution' or something along those lines on a tree.
*
* @param <ContainedType> The type of element contained in the tree.
*
- * @param tree The tree to do expansion in.
- * @param marker The function to mark which nodes should be expanded.
- * @param expander The function to expand nodes.
+ * @param tree The tree to do expansion in.
+ * @param marker The function to mark which nodes should be expanded.
+ * @param expander The function to expand nodes.
*
- * @return A transformed copy of the tree. */
- public static <ContainedType> Tree<ContainedType> substitute(
- Tree<ContainedType> tree,
- Predicate<ContainedType> marker,
- Function<ContainedType, Tree<ContainedType>> expander) {
- tree.topDownTransform((contents) -> {
- if (marker.test(contents)) return TopDownTransformResult.TRANSFORM;
- else return TopDownTransformResult.PASSTHROUGH;
- }, (node) -> {
- return expander.apply(node.getHead());
- });
+ * @return A transformed copy of the tree.
+ */
+ public static <ContainedType> Tree<ContainedType> substitute(Tree<ContainedType> tree,
+ Predicate<ContainedType> marker, Function<ContainedType, Tree<ContainedType>> expander) {
+ Function<ContainedType,
+ TopDownTransformResult> picker = (contents) -> marker.test(contents) ? TopDownTransformResult.TRANSFORM
+ : TopDownTransformResult.PASSTHROUGH;
+ tree.topDownTransform(picker, (node) -> expander.apply(node.getHead()));
return tree;
}
-
- /** Performs 'variable substitution' or something along those lines on a tree.
+
+ /**
+ * Performs 'variable substitution' or something along those lines on a tree.
*
* @param <ContainedType> The type of element contained in the tree.
*
- * @param tree The tree to do expansion in.
- * @param environment A map which contains the variables to substitute.
+ * @param tree The tree to do expansion in.
+ * @param environment A map which contains the variables to substitute.
*
- * @return A transformed copy of the tree. */
- public static <ContainedType> Tree<ContainedType> substitute(
- Tree<ContainedType> tree,
+ * @return A transformed copy of the tree.
+ */
+ public static <ContainedType> Tree<ContainedType> substitute(Tree<ContainedType> tree,
MapEx<ContainedType, Tree<ContainedType>> environment) {
- return substitute(
- tree,
- environment::containsKey,
- (element) -> environment.get(element).get());
+ return substitute(tree, environment::containsKey, (element) -> environment.get(element).get());
}
}