| /******************************************************************************* |
| * 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; |
| } |
| |
| } |