Skip to content

Commit

Permalink
fixed issue with cast-cast exceptions with edge iterators
Browse files Browse the repository at this point in the history
  • Loading branch information
trajar committed Aug 6, 2016
1 parent 63c09be commit b929d02
Showing 1 changed file with 26 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1077,7 +1077,7 @@ public void remove() {
private final class EdgeViewIterator implements Iterator<Edge> {
private final Iterator<Edge> edgeIterator;

private EdgeImpl pointer;
private Edge pointer;

public EdgeViewIterator(Iterator<Edge> edgeIterator) {
this.edgeIterator = edgeIterator;
Expand All @@ -1090,9 +1090,13 @@ public boolean hasNext() {
if (!edgeIterator.hasNext()) {
return false;
}
pointer = (EdgeImpl) edgeIterator.next();
pointer = edgeIterator.next();
if (pointer != null) {
if (!view.containsEdge(pointer)) {
if (pointer instanceof EdgeImpl && !view.containsEdge((EdgeImpl) pointer)) {
pointer = null;
}
if (pointer instanceof MappedEdgeDecorator && !view
.containsEdge(((MappedEdgeDecorator) pointer).edge)) {
pointer = null;
}
}
Expand All @@ -1115,7 +1119,7 @@ public void remove() {
private final class UndirectedEdgeViewIterator implements Iterator<Edge> {
private final Iterator<Edge> itr;

private EdgeImpl pointer;
private Edge pointer;

public UndirectedEdgeViewIterator(Iterator<Edge> itr) {
this.itr = itr;
Expand All @@ -1124,11 +1128,20 @@ public UndirectedEdgeViewIterator(Iterator<Edge> itr) {
@Override
public boolean hasNext() {
pointer = null;
while (pointer == null || !view.containsEdge(pointer) || isUndirectedToIgnore(pointer)) {
while (pointer == null) {
if (!itr.hasNext()) {
return false;
}
pointer = (EdgeImpl) itr.next();
pointer = itr.next();
if (pointer != null) {
if (pointer instanceof EdgeImpl && !view.containsEdge((EdgeImpl) pointer) && isUndirectedToIgnore((EdgeImpl) pointer)) {
pointer = null;
}
if (pointer instanceof MappedEdgeDecorator && !view
.containsEdge(((MappedEdgeDecorator) pointer).edge) && isUndirectedToIgnore(((MappedEdgeDecorator) pointer).edge)) {
pointer = null;
}
}
}
return true;
}
Expand Down Expand Up @@ -1200,17 +1213,21 @@ private Edge decorateEdge(final Edge edge) {
return edge;
}

return new MappedEdgeDecorator(edge, mappedSource, mappedTarget);
if (edge instanceof EdgeImpl) {
return new MappedEdgeDecorator((EdgeImpl) edge, mappedSource, mappedTarget);
} else {
return edge;
}
}

protected class MappedEdgeDecorator implements Edge {
private final Edge edge;
private final EdgeImpl edge;

private final Node source;

private final Node target;

private MappedEdgeDecorator(final Edge edge, final Node source, final Node target) {
private MappedEdgeDecorator(final EdgeImpl edge, final Node source, final Node target) {
this.edge = edge;
this.source = source;
this.target = target;
Expand Down

0 comments on commit b929d02

Please sign in to comment.