blob: e592c80981e8bd6b63d60933fb741fb23f698a98 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2010 IBM Corporation and others.
* 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.draw2d.graph;
/**
* A base class for visitors which operate on the graphs spanning tree used to
* induce rank assignments.
*
* @author Randy Hudson
* @since 2.1.2
*/
abstract class SpanningTreeVisitor extends GraphVisitor {
Edge getParentEdge(Node node) {
return (Edge) node.workingData[1];
}
EdgeList getSpanningTreeChildren(Node node) {
return (EdgeList) node.workingData[0];
}
protected Node getTreeHead(Edge edge) {
if (getParentEdge(edge.source) == edge)
return edge.target;
return edge.source;
}
Node getTreeParent(Node node) {
Edge e = getParentEdge(node);
if (e == null)
return null;
return e.opposite(node);
}
protected Node getTreeTail(Edge edge) {
if (getParentEdge(edge.source) == edge)
return edge.source;
return edge.target;
}
void setParentEdge(Node node, Edge edge) {
node.workingData[1] = edge;
}
}