private Iterator<Node> getIterator( SearchOrder searchOrder ) { return SearchOrder.getNodeIterator( searchOrder, getDelegate() ); }
public Node getVertex( int vertex ) { while( count < vertex && iterator.hasNext() ) { count++; index[ count ] = iterator.next(); reverse.put( (Node) index[ count ], count ); } if( index[ vertex ] == null ) { if( index.length != count - 1 ) throw new GraphFinderException( "given graph has multiple origins with search order: " + searchOrder + ", likely not all paths connect HEAD and TAIL of element graph", getDelegate() ); throw new GraphFinderException( "vertex is null: " + vertex, getDelegate() ); } return (Node) index[ vertex ]; }
public Set<Integer> getSuccessors( int vertex ) { Set<Integer> results = successors.get( vertex ); if( results != null ) return results; results = new HashSet<>(); Set<Edge> edges = getDelegate().outgoingEdgesOf( getVertex( vertex ) ); for( Edge edge : edges ) { Object result = getEdgeTarget( edge ); Integer value = getIndex( result ); if( value != null ) results.add( value ); } successors.put( vertex, results ); return results; }
public Set<Integer> getPredecessors( int vertex ) { Set<Integer> results = predecessors.get( vertex ); if( results != null ) return results; results = new HashSet<>(); Set<Edge> edges = getDelegate().incomingEdgesOf( getVertex( vertex ) ); for( Edge edge : edges ) { Object result = getEdgeSource( edge ); Integer value = getIndex( result ); if( value != null ) results.add( value ); } predecessors.put( vertex, results ); return results; }
public Edge getEdge( int lhsVertex, int rhsVertex ) { Node lhsNode = getVertex( lhsVertex ); Node rhsNode = getVertex( rhsVertex ); return getDelegate().getEdge( lhsNode, rhsNode ); }
@Override public Set<Edge> getAllEdges( Object sourceVertex, Object targetVertex ) { Node lhsNode = getVertex( (int) sourceVertex ); Node rhsNode = getVertex( ( (int) targetVertex ) ); return getDelegate().getAllEdges( lhsNode, rhsNode ); }
public boolean containsEdge( int lhsVertex, int rhsVertex ) { return getDelegate().containsEdge( getVertex( lhsVertex ), getVertex( rhsVertex ) ); }