@@ -1077,7 +1077,7 @@ public void remove() {
1077
1077
private final class EdgeViewIterator implements Iterator <Edge > {
1078
1078
private final Iterator <Edge > edgeIterator ;
1079
1079
1080
- private EdgeImpl pointer ;
1080
+ private Edge pointer ;
1081
1081
1082
1082
public EdgeViewIterator (Iterator <Edge > edgeIterator ) {
1083
1083
this .edgeIterator = edgeIterator ;
@@ -1090,9 +1090,12 @@ public boolean hasNext() {
1090
1090
if (!edgeIterator .hasNext ()) {
1091
1091
return false ;
1092
1092
}
1093
- pointer = ( EdgeImpl ) edgeIterator .next ();
1093
+ pointer = edgeIterator .next ();
1094
1094
if (pointer != null ) {
1095
- if (!view .containsEdge (pointer )) {
1095
+ if (pointer instanceof EdgeImpl && !view .containsEdge ((EdgeImpl )pointer )) {
1096
+ pointer = null ;
1097
+ }
1098
+ if (pointer instanceof MappedEdgeDecorator && !view .containsEdge (((MappedEdgeDecorator )pointer ).edge )) {
1096
1099
pointer = null ;
1097
1100
}
1098
1101
}
@@ -1115,7 +1118,7 @@ public void remove() {
1115
1118
private final class UndirectedEdgeViewIterator implements Iterator <Edge > {
1116
1119
private final Iterator <Edge > itr ;
1117
1120
1118
- private EdgeImpl pointer ;
1121
+ private Edge pointer ;
1119
1122
1120
1123
public UndirectedEdgeViewIterator (Iterator <Edge > itr ) {
1121
1124
this .itr = itr ;
@@ -1124,11 +1127,19 @@ public UndirectedEdgeViewIterator(Iterator<Edge> itr) {
1124
1127
@ Override
1125
1128
public boolean hasNext () {
1126
1129
pointer = null ;
1127
- while (pointer == null || ! view . containsEdge ( pointer ) || isUndirectedToIgnore ( pointer ) ) {
1130
+ while (pointer == null ) {
1128
1131
if (!itr .hasNext ()) {
1129
1132
return false ;
1130
1133
}
1131
- pointer = (EdgeImpl ) itr .next ();
1134
+ pointer = itr .next ();
1135
+ if (pointer != null ) {
1136
+ if (pointer instanceof EdgeImpl && !view .containsEdge ((EdgeImpl )pointer ) && isUndirectedToIgnore ((EdgeImpl )pointer )) {
1137
+ pointer = null ;
1138
+ }
1139
+ if (pointer instanceof MappedEdgeDecorator && !view .containsEdge (((MappedEdgeDecorator )pointer ).edge ) && isUndirectedToIgnore (((MappedEdgeDecorator )pointer ).edge )) {
1140
+ pointer = null ;
1141
+ }
1142
+ }
1132
1143
}
1133
1144
return true ;
1134
1145
}
@@ -1200,17 +1211,21 @@ private Edge decorateEdge(final Edge edge) {
1200
1211
return edge ;
1201
1212
}
1202
1213
1203
- return new MappedEdgeDecorator (edge , mappedSource , mappedTarget );
1214
+ if (edge instanceof EdgeImpl ) {
1215
+ return new MappedEdgeDecorator ((EdgeImpl )edge , mappedSource , mappedTarget );
1216
+ } else {
1217
+ return edge ;
1218
+ }
1204
1219
}
1205
1220
1206
1221
protected class MappedEdgeDecorator implements Edge {
1207
- private final Edge edge ;
1222
+ private final EdgeImpl edge ;
1208
1223
1209
1224
private final Node source ;
1210
1225
1211
1226
private final Node target ;
1212
1227
1213
- private MappedEdgeDecorator (final Edge edge , final Node source , final Node target ) {
1228
+ private MappedEdgeDecorator (final EdgeImpl edge , final Node source , final Node target ) {
1214
1229
this .edge = edge ;
1215
1230
this .source = source ;
1216
1231
this .target = target ;
0 commit comments