/*
 * $Id$
 *
 * Copyright 2006, The jCoderZ.org Project. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *    * Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *    * Redistributions in binary form must reproduce the above
 *      copyright notice, this list of conditions and the following
 *      disclaimer in the documentation and/or other materials
 *      provided with the distribution.
 *    * Neither the name of the jCoderZ.org Project nor the names of
 *      its contributors may be used to endorse or promote products
 *      derived from this software without specific prior written
 *      permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.jcoderz.commons.util;

import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * An empty iterator that is just empty.
 *
 * @author Andreas Mandel
 */
public final class EmptyIterator
      implements Iterator
{
   /** The constant no state EmptyIterator. */
   public static final Iterator EMPTY_ITERATOR = new EmptyIterator();

   /**
    * No instances use the EMPTY_ITERATOR constant.
    */
   private EmptyIterator ()
   {
      // nothing to do.
   }

   /**
    * {@inheritDoc}
    * @throws IllegalStateException always.
    */
   public void remove ()
       throws IllegalStateException
   {
      throw new IllegalStateException();
   }

   /**
    * {@inheritDoc}
    * Always returns false.
    */
   public boolean hasNext ()
   {
      return false;
   }

   /**
    * {@inheritDoc}
    * @throws NoSuchElementException always.
    */
   public Object next ()
       throws NoSuchElementException
   {
      throw new NoSuchElementException();
   }

}

