public static <N> Set<N> getAllReachable( final Collection<? extends N> direct, final Functor<N, Set<? extends N>> succ) { final Set<N> result = new ArrayHashSet<N>(direct.size()); result.addAll(direct); final Queue<N> todo = new LinkedList<N>(direct); while (!todo.isEmpty()) { final N next = todo.poll(); for (final N succNode : succ.apply(next)) { if (result.add(succNode)) { todo.add(succNode); } } } return Collections.unmodifiableSet(result); }
public static <N, O> Set<O> collectFromAllReachable( final Collection<? extends N> direct, final Collection<? extends O> init, final Functor<N, Set<? extends N>> succ, final Functor<N, Set<? extends O>> collect) { final Set<O> result = new ArrayHashSet<O>(); result.addAll(init); final Set<N> queued = new ArrayHashSet<N>(); queued.addAll(direct); final Queue<N> todo = new LinkedList<N>(direct); while (!todo.isEmpty()) { final N next = todo.poll(); result.addAll(collect.apply(next)); for (final N succNode : succ.apply(next)) { if (queued.add(succNode)) { todo.add(succNode); } } } return Collections.unmodifiableSet(result); }
public static <N, O> Set<O> collectFromAllReachable( final Collection<? extends N> direct, final Collection<? extends O> init, final Functor<N, Set<? extends N>> succ, final Functor<N, Set<? extends O>> collect) { final Set<O> result = new ArrayHashSet<O>(); result.addAll(init); final Set<N> queued = new ArrayHashSet<N>(); queued.addAll(direct); final Queue<N> todo = new LinkedList<N>(direct); while (!todo.isEmpty()) { final N next = todo.poll(); result.addAll(collect.apply(next)); for (final N succNode : succ.apply(next)) { if (queued.add(succNode)) { todo.add(succNode); } } } return Collections.unmodifiableSet(result); }
public static <N, O> Set<O> collectFromAllReachable( final Collection<? extends N> direct, final Collection<? extends O> init, final Functor<N, Set<? extends N>> succ, final Functor<N, Set<? extends O>> collect) { final Set<O> result = new ArrayHashSet<O>(); result.addAll(init); final Set<N> queued = new ArrayHashSet<N>(); queued.addAll(direct); final Queue<N> todo = new LinkedList<N>(direct); while (!todo.isEmpty()) { final N next = todo.poll(); result.addAll(collect.apply(next)); for (final N succNode : succ.apply(next)) { if (queued.add(succNode)) { todo.add(succNode); } } } return Collections.unmodifiableSet(result); }
public static <N> Set<N> getAllReachable( final Collection<? extends N> direct, final Functor<N, Set<? extends N>> succ) { final Set<N> result = new ArrayHashSet<N>(direct.size()); result.addAll(direct); final Queue<N> todo = new LinkedList<N>(direct); while (!todo.isEmpty()) { final N next = todo.poll(); for (final N succNode : succ.apply(next)) { if (result.add(succNode)) { todo.add(succNode); } } } return Collections.unmodifiableSet(result); }
public static <N> Set<N> getAllReachable( final Collection<? extends N> direct, final Functor<N, Set<? extends N>> succ) { final Set<N> result = new ArrayHashSet<N>(direct.size()); result.addAll(direct); final Queue<N> todo = new LinkedList<N>(direct); while (!todo.isEmpty()) { final N next = todo.poll(); for (final N succNode : succ.apply(next)) { if (result.add(succNode)) { todo.add(succNode); } } } return Collections.unmodifiableSet(result); }
@Override public O next() { return functor_.apply(iter_.next()); }
@Override public O next() { return functor_.apply(iter_.next()); }
@Override public O next() { return functor_.apply(iter_.next()); }