implemented some more featutres.
This commit is contained in:
parent
f8921c4389
commit
4e9748d4b9
|
@ -12,6 +12,8 @@ package com.ibm.wala.util.graph;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import javax.naming.OperationNotSupportedException;
|
||||||
|
|
||||||
import com.ibm.wala.util.debug.Assertions;
|
import com.ibm.wala.util.debug.Assertions;
|
||||||
import com.ibm.wala.util.intset.IBinaryNaturalRelation;
|
import com.ibm.wala.util.intset.IBinaryNaturalRelation;
|
||||||
import com.ibm.wala.util.intset.IntIterator;
|
import com.ibm.wala.util.intset.IntIterator;
|
||||||
|
@ -49,39 +51,78 @@ public class EdgeFilteredNumberedGraph<T> extends AbstractNumberedGraph<T> {
|
||||||
|
|
||||||
private final class Edges implements NumberedEdgeManager<T> {
|
private final class Edges implements NumberedEdgeManager<T> {
|
||||||
|
|
||||||
|
private final class NodeIterator implements Iterator<T> {
|
||||||
|
private final IntIterator nodeNumbers;
|
||||||
|
|
||||||
|
private NodeIterator(IntSet nodeNumbers) {
|
||||||
|
this.nodeNumbers = nodeNumbers.intIterator();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addEdge(T src, T dst) {
|
public boolean hasNext() {
|
||||||
Assertions.UNREACHABLE();
|
return nodeNumbers.hasNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T next() {
|
||||||
|
return getNode(nodeNumbers.next());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPredNodeCount(T N) {
|
public int getPredNodeCount(T N) {
|
||||||
Assertions.UNREACHABLE();
|
return getPredNodeNumbers(N).size();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<T> getPredNodes(T N) {
|
public Iterator<T> getPredNodes(T N) {
|
||||||
Assertions.UNREACHABLE();
|
return new NodeIterator(getPredNodeNumbers(N));
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSuccNodeCount(T N) {
|
public int getSuccNodeCount(T N) {
|
||||||
Assertions.UNREACHABLE();
|
return getSuccNodeNumbers(N).size();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<T> getSuccNodes(T N) {
|
public Iterator<T> getSuccNodes(T N) {
|
||||||
Assertions.UNREACHABLE();
|
return new NodeIterator(getSuccNodeNumbers(N));
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasEdge(T src, T dst) {
|
public boolean hasEdge(T src, T dst) {
|
||||||
|
return delegate.hasEdge(src, dst) && !ignoreEdges.contains(getNumber(src), getNumber(dst));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntSet getPredNodeNumbers(T node) {
|
||||||
|
return getFilteredNodeNumbers(node, delegate.getPredNodeNumbers(node));
|
||||||
|
}
|
||||||
|
|
||||||
|
private IntSet getFilteredNodeNumbers(T node, IntSet s) {
|
||||||
|
MutableIntSet result = MutableSparseIntSet.makeEmpty();
|
||||||
|
for (IntIterator it = s.intIterator(); it.hasNext();) {
|
||||||
|
int y = it.next();
|
||||||
|
if (!ignoreEdges.contains(y, getNumber(node))) {
|
||||||
|
result.add(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntSet getSuccNodeNumbers(T node) {
|
||||||
|
return getFilteredNodeNumbers(node, delegate.getSuccNodeNumbers(node));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addEdge(T src, T dst) {
|
||||||
Assertions.UNREACHABLE();
|
Assertions.UNREACHABLE();
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -103,26 +144,6 @@ public class EdgeFilteredNumberedGraph<T> extends AbstractNumberedGraph<T> {
|
||||||
public void removeOutgoingEdges(T node) throws UnsupportedOperationException {
|
public void removeOutgoingEdges(T node) throws UnsupportedOperationException {
|
||||||
Assertions.UNREACHABLE();
|
Assertions.UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public IntSet getPredNodeNumbers(T node) {
|
|
||||||
IntSet s = delegate.getPredNodeNumbers(node);
|
|
||||||
MutableIntSet result = MutableSparseIntSet.makeEmpty();
|
|
||||||
for (IntIterator it = s.intIterator(); it.hasNext();) {
|
|
||||||
int y = it.next();
|
|
||||||
if (!ignoreEdges.contains(y, getNumber(node))) {
|
|
||||||
result.add(y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IntSet getSuccNodeNumbers(T node) {
|
|
||||||
Assertions.UNREACHABLE();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue