code: package edu.berkeley.nlp.util;
  
  import java.util.Collection;
  import java.util.Iterator;
  import java.util.List;
  
  /**
   * Created by IntelliJ IDEA. User: aria42 Date: Nov 15, 2008
   */
  public class Iterables {
  	public static <S, T> Iterable<Pair<S, T>> zip(final Iterable<S> s,
  			final Iterable<T> t) {
  		return new Iterable<Pair<S, T>>() {
  			public Iterator<Pair<S, T>> iterator() {
  				return Iterators.zip(s.iterator(), t.iterator());
  			}
  		};
  	}
  
  	public static <S> Iterable<S> concat(final Iterable<S>... iterables) {
  		return new ConcatenationIterable<S>(iterables);
  	}
  
  	public static <T> int size(Iterable<T> iterable) {
  		if (Collection.class.isInstance(iterable)) {
  			return ((Collection) iterable).size();
  		}
  		int count = 0;
  		for (T t : iterable) {
  			count++;
  		}
  		return count;
  	}
  
  	public static <T> List<T> fillList(Iterable<T> iterable) {
  		return Iterators.fillList(iterable.iterator());
  	}
  
  	public static <T> boolean isEmpty(Iterable<T> iterable) {
  		return Iterables.size(iterable) == 0;
  	}
  }
  