/**********************************************************************
 * Copyright (c) 2007 IBM Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.ptp.pldt.mpi.analysis.cdt.graphs;

import java.util.List;

import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;

/**
 * A call graph is a directed graph which represents the calling relation
 * among subroutines in a program. In CDT, it is partially determined
 * by static analysis.
 * 
 * @author Yuan Zhang
 *
 */
public interface ICallGraph {
	
	/**
	 * @return all functions in the call graph
	 */
	public List<ICallGraphNode> getAllNodes();
	
	/**
	 * @return all global variables
	 */
	public List<String> getEnv();
	
	/**
	 * @return one root function. A root function is never called by 
	 * other functions. There may be multiple root functions in a call
	 * graph. 
	 */
	public ICallGraphNode topEntry();
	public void setTopEntry(ICallGraphNode node);
	
	/**
	 * @return one leaf function. A leaf function never calls any other
	 * functions. There may be multiple leaf functions in a call graph.
	 */
	public ICallGraphNode botEntry();
	public void setBotEntry(ICallGraphNode node);
	
	/**
	 * @return list of recursive function calls
	 */
	public List<List<ICallGraphNode>> getCycles();
	
	/**
	 * Search for a function according to its filename and function name.
	 * @param fileName
	 * @param funcName
	 * @return its call graph node if it is found; null otherwise.
	 */
	public ICallGraphNode getNode(String fileName, String funcName);
	
	/**
	 * Search for a function according to its declaration.
	 * @param fdef
	 * @return its call graph node if it is found; null otherwise.
	 */
	public ICallGraphNode getNode(IASTFunctionDefinition fdef);
	
	/**
	 * Add a function node to the call graph. Its calling relation
	 * is not constructed yet.
	 * @param node
	 */
	public void addNode(ICallGraphNode node);
	
	/**
	 * Build the calling relations. This method is not reponsible for
	 * collecting functions in a program.
	 */
	public void buildCG();
	
	public void print();
	
}
