TreeTraverser.java 3.45 KB
package com.google.common.collect;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.base.Preconditions;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
import java.util.Queue;

@Beta
@GwtCompatible(emulated=true)
public abstract class TreeTraverser<T>
{
  public final FluentIterable<T> breadthFirstTraversal(final T paramT)
  {
    Preconditions.checkNotNull(paramT);
    new FluentIterable() {};
  }
  
  public abstract Iterable<T> children(T paramT);
  
  public final FluentIterable<T> postOrderTraversal(final T paramT)
  {
    Preconditions.checkNotNull(paramT);
    new FluentIterable() {};
  }
  
  public final FluentIterable<T> preOrderTraversal(final T paramT)
  {
    Preconditions.checkNotNull(paramT);
    new FluentIterable() {};
  }
  
  final class a
    extends UnmodifiableIterator<T>
    implements PeekingIterator<T>
  {
    private final Queue<T> b = new ArrayDeque();
    
    a()
    {
      Object localObject;
      this.b.add(localObject);
    }
    
    public final boolean hasNext()
    {
      return !this.b.isEmpty();
    }
    
    public final T next()
    {
      Object localObject = this.b.remove();
      Iterables.addAll(this.b, TreeTraverser.this.children(localObject));
      return (T)localObject;
    }
    
    public final T peek()
    {
      return (T)this.b.element();
    }
  }
  
  final class b
    extends AbstractIterator<T>
  {
    private final ArrayDeque<TreeTraverser.c<T>> b = new ArrayDeque();
    
    b()
    {
      Object localObject;
      this.b.addLast(a(localObject));
    }
    
    private TreeTraverser.c<T> a(T paramT)
    {
      return new TreeTraverser.c(paramT, TreeTraverser.this.children(paramT).iterator());
    }
    
    protected final T computeNext()
    {
      while (!this.b.isEmpty())
      {
        Object localObject = (TreeTraverser.c)this.b.getLast();
        if (((TreeTraverser.c)localObject).b.hasNext())
        {
          localObject = ((TreeTraverser.c)localObject).b.next();
          this.b.addLast(a(localObject));
        }
        else
        {
          this.b.removeLast();
          return (T)((TreeTraverser.c)localObject).a;
        }
      }
      return (T)endOfData();
    }
  }
  
  static final class c<T>
  {
    final T a;
    final Iterator<T> b;
    
    c(T paramT, Iterator<T> paramIterator)
    {
      this.a = Preconditions.checkNotNull(paramT);
      this.b = ((Iterator)Preconditions.checkNotNull(paramIterator));
    }
  }
  
  final class d
    extends UnmodifiableIterator<T>
  {
    private final Deque<Iterator<T>> b = new ArrayDeque();
    
    d()
    {
      Object localObject;
      this.b.addLast(Iterators.singletonIterator(Preconditions.checkNotNull(localObject)));
    }
    
    public final boolean hasNext()
    {
      return !this.b.isEmpty();
    }
    
    public final T next()
    {
      Iterator localIterator = (Iterator)this.b.getLast();
      Object localObject = Preconditions.checkNotNull(localIterator.next());
      if (!localIterator.hasNext()) {
        this.b.removeLast();
      }
      localIterator = TreeTraverser.this.children(localObject).iterator();
      if (localIterator.hasNext()) {
        this.b.addLast(localIterator);
      }
      return (T)localObject;
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/collect/TreeTraverser.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */