From 65b56f0519906ccf374a3b84c6f688cd5be235b8 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Wed, 22 Feb 2017 12:37:32 -0500 Subject: Update to allow backflow during step-evals. *Thunk* --- .../bjc/utils/data/TopDownTransformIterator.java | 48 ++++++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) (limited to 'BJC-Utils2/src/main') diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/TopDownTransformIterator.java b/BJC-Utils2/src/main/java/bjc/utils/data/TopDownTransformIterator.java index 73db2ee..3886264 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/data/TopDownTransformIterator.java +++ b/BJC-Utils2/src/main/java/bjc/utils/data/TopDownTransformIterator.java @@ -4,12 +4,15 @@ import java.util.Deque; import java.util.Iterator; import java.util.LinkedList; import java.util.NoSuchElementException; +import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.UnaryOperator; public class TopDownTransformIterator implements Iterator> { private Function picker; - private UnaryOperator> transform; + private BiFunction, + Consumer>>, + ITree> transform; private ITree preParent; private ITree postParent; @@ -22,13 +25,17 @@ public class TopDownTransformIterator implements Iterator pickr, - UnaryOperator> transfrm, + private Deque>> toYield; + private Iterator> curYield; + + public TopDownTransformIterator(Function pickr, + BiFunction, Consumer>>, ITree> transfrm, ITree tree) { preParent = tree; preChildren = new LinkedList<>(); postChildren = new LinkedList<>(); + toYield = new LinkedList<>(); picker = pickr; transform = transfrm; @@ -37,6 +44,14 @@ public class TopDownTransformIterator implements Iterator> src) { + if(curYield != null) { + toYield.push(curYield); + } + + curYield = src; + } + public boolean hasNext() { return !done; } @@ -67,7 +82,7 @@ public class TopDownTransformIterator implements Iterator implements Iterator(preParent.getHead())); + return transform.apply(new Tree<>(preParent.getHead()), this::addYield); } case PULLUP: - ITree intRes = transform.apply(preParent); + ITree intRes = transform.apply(preParent, this::addYield); postParent = new Tree<>(intRes.getHead()); @@ -103,6 +118,20 @@ public class TopDownTransformIterator implements Iterator(picker, transform, preChildren.pop()); @@ -121,7 +150,7 @@ public class TopDownTransformIterator implements Iterator implements Iterator