TraceItem<S, P> result = null; for (S start : starts) { TraceItem<S, P> item = new TraceItem<S, P>(null, start, stackItem); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) { TraceItem<S, P> found = new TraceItem<S, P>(trace, follower, trace.stackitem); if (found.stackitem == null) return found; result = found; counter = result.stackitem.size() * -1; } else if (result.stackitem.size() == found.stackitem.size() && result.size() > found.size()) { result = found; counter = result.stackitem.size() * -1; if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));
public <S, P> List<S> shortestStackpruningPathTo(Pda<S, P> pda, S start, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = traceToWithPruningStack(pda, Collections.singleton(start), stack, matches, canPass); if (trace != null) return trace.asList(); return null; }
TraceItem<S, P> result = null; for (S start : starts) { TraceItem<S, P> item = new TraceItem<S, P>(null, start, stackItem); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) { TraceItem<S, P> found = new TraceItem<S, P>(trace, follower, trace.stackitem); if (found.stackitem == null) return found; result = found; counter = result.stackitem.size() * -1; } else if (result.stackitem.size() == found.stackitem.size() && result.size() > found.size()) { result = found; counter = result.stackitem.size() * -1; if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));
current.add(new TraceItem<S, P>(null, start, stackItem)); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) return new TraceItem<S, P>(trace, follower, trace.stackitem); if (canPass.apply(follower)) { P push = pda.getPush(follower); if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));
current.add(new TraceItem<S, P>(null, start, stackItem)); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) return new TraceItem<S, P>(trace, follower, trace.stackitem); if (canPass.apply(follower)) { P push = pda.getPush(follower); if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));
@Override public String toString() { return "States: " + asList() + " Stack: " + stackitem; }
public <S, P> List<S> shortestStackpruningPathTo(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = traceToWithPruningStack(pda, starts, stack, matches, canPass); if (trace != null) return trace.asList(); return null; }
public <S, P> List<S> shortestStackpruningPathTo(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = traceToWithPruningStack(pda, starts, stack, matches, canPass); if (trace != null) return trace.asList(); return null; }
public <S, P> long distanceTo(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = trace(pda, starts, stack, matches, canPass); if (trace != null) return trace.size(); return UNREACHABLE; }
public <S, P> List<S> shortestPathTo(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = trace(pda, starts, stack, matches, canPass); if (trace != null) return trace.asList(); return null; }
@Override public String toString() { return "States: " + asList() + " Stack: " + stackitem; }
public <S, P> List<S> shortestPathTo(Pda<S, P> pda, S start, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = trace(pda, Collections.singleton(start), stack, matches, canPass); if (trace != null) return trace.asList(); return null; }
public <S, P> List<S> shortestStackpruningPathTo(Pda<S, P> pda, S start, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = traceToWithPruningStack(pda, Collections.singleton(start), stack, matches, canPass); if (trace != null) return trace.asList(); return null; }
public <S, P> List<S> shortestPathTo(Pda<S, P> pda, S start, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = trace(pda, Collections.singleton(start), stack, matches, canPass); if (trace != null) return trace.asList(); return null; }
public <S, P> long distanceTo(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = trace(pda, starts, stack, matches, canPass); if (trace != null) return trace.size(); return UNREACHABLE; }
public <S, P> List<S> shortestPathTo(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { TraceItem<S, P> trace = trace(pda, starts, stack, matches, canPass); if (trace != null) return trace.asList(); return null; }