public List<Edge> getAllEdgesList( Object sourceVertex, Object targetVertex ) { return new ArrayList<>( getAllEdges( sourceVertex, targetVertex ) ); } }
public Edge getEdge( int lhsVertex, int rhsVertex ) { Node lhsNode = getVertex( lhsVertex ); Node rhsNode = getVertex( rhsVertex ); return getDelegate().getEdge( lhsNode, rhsNode ); }
public IndexedGraph( SearchOrder searchOrder, G graph ) { super( graph ); this.searchOrder = searchOrder; this.delegate = graph; this.index = new Object[ vertexSet().size() ]; this.count = -1; this.iterator = getIterator( searchOrder ); this.reverse = new IdentityHashMap<>( index.length ); }
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; }
private Iterator<Node> getIterator( SearchOrder searchOrder ) { return SearchOrder.getNodeIterator( searchOrder, getDelegate() ); }
public Integer getIndex( Object result ) { Integer index = reverse.get( result ); if( index != null ) return index; while( iterator.hasNext() ) { if( getVertex( count + 1 ) == result ) break; } return count; }
@Override public List<ScopeExpression> getAllEdgesList( Object sourceVertex, Object targetVertex ) { ArrayList<ScopeExpression> allEdges = (ArrayList<ScopeExpression>) super.getAllEdgesList( sourceVertex, targetVertex ); ListIterator<ScopeExpression> iterator = allEdges.listIterator(); while( iterator.hasNext() ) iterator.set( ExpressionGraph.unwind( iterator.next() ) ); return allEdges; } }
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 ]; }
@Override public Set<Edge> getAllEdges( Object sourceVertex, Object targetVertex ) { Node lhsNode = getVertex( (int) sourceVertex ); Node rhsNode = getVertex( ( (int) targetVertex ) ); return getDelegate().getAllEdges( lhsNode, rhsNode ); }
@Override public Set<ScopeExpression> getAllEdges( Object sourceVertex, Object targetVertex ) { Set<ScopeExpression> allEdges = super.getAllEdges( sourceVertex, targetVertex ); Set<ScopeExpression> results = new HashSet<>( allEdges.size() ); for( ScopeExpression edge : allEdges ) results.add( ExpressionGraph.unwind( edge ) ); return results; }
public boolean containsEdge( int lhsVertex, int rhsVertex ) { return getDelegate().containsEdge( getVertex( lhsVertex ), getVertex( rhsVertex ) ); }