blob: b6a16eebebfd79d2e69dec378a43e5f630c97fab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 STMicroelectronics.
* 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:
* Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.gprof.symbolManager;
import java.util.LinkedList;
import org.eclipse.cdt.core.IBinaryParser.ISymbol;
/**
* This class represents a node of a call graph
*
* @author Xavier Raynaud <xavier.raynaud@st.com>
*/
public class CallGraphNode {
private final ISymbol symbol;
private final LinkedList<CallGraphArc> parents = new LinkedList<>();
private final LinkedList<CallGraphArc> children = new LinkedList<>();
/**
* Constructor
*
* @param symbol
*/
public CallGraphNode(ISymbol symbol) {
this.symbol = symbol;
}
/**
* @param parent
* @return the input arc caming from the given parent, if any.
*/
public CallGraphArc getInputArc(CallGraphNode parent) {
for (CallGraphArc inputArc : parents) {
if (inputArc.parent == parent) {
return inputArc;
}
}
return null;
}
/**
*
* @param child
* @return the arc to the given child, if any.
*/
public CallGraphArc getOutputArc(CallGraphNode child) {
for (CallGraphArc outputArc : children) {
if (outputArc.child == child) {
return outputArc;
}
}
return null;
}
/**
* @return the symbol
*/
public ISymbol getSymbol() {
return symbol;
}
/**
* @return the parents
*/
public LinkedList<CallGraphArc> getParents() {
return parents;
}
/**
* @return the children
*/
public LinkedList<CallGraphArc> getChildren() {
return children;
}
/**
* Print on System.out, for debugging purpose
*/
public void print() {
System.out.println(this.symbol.getName());
System.out.println(" -- parents --"); //$NON-NLS-1$
for (CallGraphArc arc : this.parents) {
arc.print();
}
System.out.println(" -- children --"); //$NON-NLS-1$
for (CallGraphArc arc : this.children) {
arc.print();
}
}
/**
* @return the total calls for this function
*/
public int getCalls() {
int ret = 0;
for (CallGraphArc arc : this.parents) {
ret += arc.getCount();
}
return ret;
}
}