/**********************************************************************
 * Copyright (c) 2002,2003 Rational Software Corporation and others.
 * All rights reserved.   This program and the accompanying materials
 * are made available under the terms of the Common Public License v0.5
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v05.html
 * 
 * Contributors: 
 * IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.pst;

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

import org.eclipse.cdt.internal.core.parser.ast.complete.ASTSymbol;

/**
 * @author jcamelon
 *
 */
public class ForewardDeclaredSymbolExtension extends AbstractSymbolExtension
{
    /**
     * @author jcamelon
     *
     */
    private class DualIterator implements Iterator
    {
    	private int state = 0; 
        /**
         * 
         */
        public DualIterator()
        {
            super();
        }

        /* (non-Javadoc)
         * @see java.util.Iterator#hasNext()
         */
        public boolean hasNext()
        {
            if( state == 0 ) return true; 
            if( state == 1 && definitionSymbol != null ) return true;
            return false;
        }

        /* (non-Javadoc)
         * @see java.util.Iterator#next()
         */
        public Object next()
        {
            switch( state )
            {
            	case 0: 
            		state = 1; 
            		return primaryDeclaration;
            	case 1: 
            		if( definitionSymbol != null )
            		{
  	            		state = 2; 
    	        		return definitionSymbol;
            		}
            		break;
            }
            throw new NoSuchElementException();
            
        }

        /* (non-Javadoc)
         * @see java.util.Iterator#remove()
         */
        public void remove()
        {
            throw new UnsupportedOperationException();
        }
    }
    
	protected ASTSymbol definitionSymbol = null; 
    /**
     * @param symbol
     * @param primaryDeclaration
     */
    public ForewardDeclaredSymbolExtension(
        ISymbol symbol,
        ASTSymbol primaryDeclaration)
    {
        super(symbol, primaryDeclaration);
    }

    /* (non-Javadoc)
     * @see org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension#getAllDefinitions()
     */
    public Iterator getAllDefinitions()
    {
        return new DualIterator();
    }

    /* (non-Javadoc)
     * @see org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension#addDefinition(org.eclipse.cdt.internal.core.parser.ast.complete.ASTSymbol)
     */
    public void addDefinition(ASTSymbol definition) throws ExtensionException
    {
        if( definitionSymbol != null )
        	throw new ExtensionException();
        definitionSymbol = definition;
    }
}
