private boolean pushEdge(final KamEdge edge,
            final SetStack<KamNode> nodeStack,
            final SetStack<KamEdge> edgeStack) {

        if (edgeStack.contains(edge)) {
            return false;
        }

        final KamNode currentNode = nodeStack.peek();
        final KamNode edgeOppositeNode =
                (edge.getSourceNode() == currentNode ? edge
                        .getTargetNode() : edge.getSourceNode());

        if (nodeStack.contains(edgeOppositeNode)) {
            return false;
        }

        nodeStack.push(edgeOppositeNode);
        edgeStack.push(edge);
        return true;
    }
private boolean pushEdge ( final KamEdge edge , final SetStack < KamNode > nodeStack , final SetStack < KamEdge > edgeStack ) { if ( edgeStack . contains ( edge ) ) { return false ; } final KamNode currentNode = nodeStack . peek ( ) ; final KamNode edgeOppositeNode = ( edge . getSourceNode ( ) == currentNode ? edge . getTargetNode ( ) : edge . getSourceNode ( ) ) ; if ( nodeStack . contains ( edgeOppositeNode ) ) { return false ; } nodeStack . push ( edgeOppositeNode ) ; edgeStack . push ( edge ) ; return true ; }
Determines whether the edge can be traversed.  This implementation will
check if the {@link KamNode} or {@link KamEdge} have been visited to
ensure there are no cycles in the resulting paths.
<p>
If the edge can be travered it will be placed on the edge {@link Stack},
and the edge's unvisited node will be placed on the node {@link Stack}.
</p>

@param edge {@link KamEdge}, the kam edge to evaluate
@param nodeStack {@link Stack} of {@link KamNode}, the nodes on the
current scan from the <tt>source</tt>
@param edgeStack {@link Stack} of {@link KamEdge}, the edges on the
current scan from the <tt>source</tt>
@return <tt>true</tt> if the edge will be traversed, <tt>false</tt> if
not