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; }
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> 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> 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; }
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, R> List<R> collectReachable(Pda<S, P> pda, final Function<S, R> function) { final List<R> result = Lists.newArrayList(); Iterator<P> stack = Collections.<P> emptyList().iterator(); Predicate<S> matches = Predicates.<S> alwaysFalse(); Predicate<S> canPass = new Predicate<S>() { @Override public boolean apply(S input) { R r = function.apply(input); if (r != null) { result.add(r); return false; } else { return true; } } }; trace(pda, Collections.singleton(pda.getStart()), stack, matches, canPass); return result; }