/** * Create edge between nodes a and b * <p> * * @return EdgeIteratorState of newly created edge */ @Override public EdgeIteratorState edge(int nodeA, int nodeB) { if (isFrozen()) throw new IllegalStateException("Cannot create edge if graph is already frozen"); ensureNodeIndex(Math.max(nodeA, nodeB)); int edgeId = edgeAccess.internalEdgeAdd(nextEdgeId(), nodeA, nodeB); EdgeIterable iter = new EdgeIterable(this, edgeAccess, EdgeFilter.ALL_EDGES); boolean ret = iter.init(edgeId, nodeB); assert ret; if (extStorage.isRequireEdgeField()) iter.setAdditionalField(extStorage.getDefaultEdgeFieldValue()); return iter; }
removeNode = toRemoveSet.next(removeNode + 1)) { adjNodesToDelIter.setBaseNode(removeNode); long prev = EdgeIterator.NO_EDGE; while (adjNodesToDelIter.next()) { int nodeId = adjNodesToDelIter.getAdjNode(); int edgeToRemove = adjNodesToDelIter.getEdge(); long edgeToRemovePointer = edgeAccess.toPointer(edgeToRemove); edgeAccess.internalEdgeDisconnect(edgeToRemove, prev, removeNode, nodeId);
final boolean init(int tmpEdgeId, int expectedAdjNode) { setEdgeId(tmpEdgeId); if (!EdgeIterator.Edge.isValid(edgeId)) throw new IllegalArgumentException("fetching the edge requires a valid edgeId but was " + edgeId); selectEdgeAccess(); edgePointer = edgeAccess.toPointer(tmpEdgeId); baseNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEA); if (baseNode == EdgeAccess.NO_NODE) throw new IllegalStateException("content of edgeId " + edgeId + " is marked as invalid - ie. the edge is already removed!"); adjNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEB); // a next() call should return false nextEdgeId = EdgeIterator.NO_EDGE; if (expectedAdjNode == adjNode || expectedAdjNode == Integer.MIN_VALUE) { reverse = false; return true; } else if (expectedAdjNode == baseNode) { reverse = true; baseNode = adjNode; adjNode = expectedAdjNode; return true; } return false; }
adjNodesToDelIter.setBaseNode(removeNode); long prev = EdgeIterator.NO_EDGE; while (adjNodesToDelIter.next()) int nodeId = adjNodesToDelIter.getAdjNode(); int edgeToRemove = adjNodesToDelIter.getEdge(); long edgeToRemovePointer = edgeAccess.toPointer(edgeToRemove); edgeAccess.internalEdgeDisconnect(edgeToRemove, prev, removeNode, nodeId);
removeNode = toRemoveSet.next(removeNode + 1)) { adjNodesToDelIter.setBaseNode(removeNode); long prev = EdgeIterator.NO_EDGE; while (adjNodesToDelIter.next()) { int nodeId = adjNodesToDelIter.getAdjNode(); int edgeToRemove = adjNodesToDelIter.getEdge(); long edgeToRemovePointer = edgeAccess.toPointer(edgeToRemove); edgeAccess.internalEdgeDisconnect(edgeToRemove, prev, removeNode, nodeId);
removeNode = toRemoveSet.next(removeNode + 1)) { adjNodesToDelIter.setBaseNode(removeNode); long prev = EdgeIterator.NO_EDGE; while (adjNodesToDelIter.next()) { int nodeId = adjNodesToDelIter.getAdjNode(); int edgeToRemove = adjNodesToDelIter.getEdge(); long edgeToRemovePointer = edgeAccess.toPointer(edgeToRemove); edgeAccess.internalEdgeDisconnect(edgeToRemove, prev, removeNode, nodeId);
final boolean init( int tmpEdgeId, int expectedAdjNode ) { setEdgeId(tmpEdgeId); if (tmpEdgeId != EdgeIterator.NO_EDGE) { selectEdgeAccess(); this.edgePointer = edgeAccess.toPointer(tmpEdgeId); } // expect only edgePointer is properly initialized via setEdgeId baseNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEA); if (baseNode == EdgeAccess.NO_NODE) throw new IllegalStateException("content of edgeId " + edgeId + " is marked as invalid - ie. the edge is already removed!"); adjNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEB); // a next() call should return false nextEdgeId = EdgeIterator.NO_EDGE; if (expectedAdjNode == adjNode || expectedAdjNode == Integer.MIN_VALUE) { reverse = false; return true; } else if (expectedAdjNode == baseNode) { reverse = true; baseNode = adjNode; adjNode = expectedAdjNode; return true; } return false; }
final boolean init(int tmpEdgeId, int expectedAdjNode) { setEdgeId(tmpEdgeId); if (tmpEdgeId != EdgeIterator.NO_EDGE) { selectEdgeAccess(); this.edgePointer = edgeAccess.toPointer(tmpEdgeId); } // expect only edgePointer is properly initialized via setEdgeId baseNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEA); if (baseNode == EdgeAccess.NO_NODE) throw new IllegalStateException("content of edgeId " + edgeId + " is marked as invalid - ie. the edge is already removed!"); adjNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEB); // a next() call should return false nextEdgeId = EdgeIterator.NO_EDGE; if (expectedAdjNode == adjNode || expectedAdjNode == Integer.MIN_VALUE) { reverse = false; return true; } else if (expectedAdjNode == baseNode) { reverse = true; baseNode = adjNode; adjNode = expectedAdjNode; return true; } return false; }
final boolean init(int tmpEdgeId, int expectedAdjNode) { setEdgeId(tmpEdgeId); if (tmpEdgeId != EdgeIterator.NO_EDGE) { selectEdgeAccess(); this.edgePointer = edgeAccess.toPointer(tmpEdgeId); } // expect only edgePointer is properly initialized via setEdgeId baseNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEA); if (baseNode == EdgeAccess.NO_NODE) throw new IllegalStateException("content of edgeId " + edgeId + " is marked as invalid - ie. the edge is already removed!"); adjNode = edgeAccess.edges.getInt(edgePointer + edgeAccess.E_NODEB); // a next() call should return false nextEdgeId = EdgeIterator.NO_EDGE; if (expectedAdjNode == adjNode || expectedAdjNode == Integer.MIN_VALUE) { reverse = false; return true; } else if (expectedAdjNode == baseNode) { reverse = true; baseNode = adjNode; adjNode = expectedAdjNode; return true; } return false; }
@Override public final boolean next() { while (true) { if (nextEdgeId == EdgeIterator.NO_EDGE) return false; selectEdgeAccess(); edgePointer = edgeAccess.toPointer(nextEdgeId); edgeId = nextEdgeId; adjNode = edgeAccess.getOtherNode(baseNode, edgePointer); reverse = baseNode > adjNode; freshFlags = false; // position to next edge nextEdgeId = edgeAccess.getEdgeRef(baseNode, adjNode, edgePointer); assert nextEdgeId != edgeId : ("endless loop detected for base node: " + baseNode + ", adj node: " + adjNode + ", edge pointer: " + edgePointer + ", edge: " + edgeId); if (filter.accept(this)) return true; } }
@Override public final boolean next() { while (true) { if (nextEdgeId == EdgeIterator.NO_EDGE) return false; selectEdgeAccess(); edgePointer = edgeAccess.toPointer(nextEdgeId); edgeId = nextEdgeId; adjNode = edgeAccess.getOtherNode(baseNode, edgePointer); reverse = baseNode > adjNode; freshFlags = false; // position to next edge nextEdgeId = edgeAccess.getEdgeRef(baseNode, adjNode, edgePointer); assert nextEdgeId != edgeId : ("endless loop detected for base node: " + baseNode + ", adj node: " + adjNode + ", edge pointer: " + edgePointer + ", edge: " + edgeId); if (filter.accept(this)) return true; } }
/** * Create edge between nodes a and b * <p> * * @return EdgeIteratorState of newly created edge */ @Override public EdgeIteratorState edge(int nodeA, int nodeB) { if (isFrozen()) throw new IllegalStateException("Cannot create edge if graph is already frozen"); ensureNodeIndex(Math.max(nodeA, nodeB)); int edgeId = edgeAccess.internalEdgeAdd(nextEdgeId(), nodeA, nodeB); EdgeIterable iter = new EdgeIterable(this, edgeAccess, EdgeFilter.ALL_EDGES); boolean ret = iter.init(edgeId, nodeB); assert ret; if (extStorage.isRequireEdgeField()) iter.setAdditionalField(extStorage.getDefaultEdgeFieldValue()); return iter; }
/** * Create edge between nodes a and b * <p> * @return EdgeIteratorState of newly created edge */ @Override public EdgeIteratorState edge( int nodeA, int nodeB ) { if (isFrozen()) throw new IllegalStateException("Cannot create edge if graph is already frozen"); ensureNodeIndex(Math.max(nodeA, nodeB)); int edgeId = edgeAccess.internalEdgeAdd(nextEdgeId(), nodeA, nodeB); EdgeIterable iter = new EdgeIterable(this, edgeAccess, EdgeFilter.ALL_EDGES); boolean ret = iter.init(edgeId, nodeB); assert ret; if (extStorage.isRequireEdgeField()) iter.setAdditionalField(extStorage.getDefaultEdgeFieldValue()); return iter; }
@Override public EdgeIteratorState detach( boolean reverseArg ) { if (edgeId == nextEdgeId || edgeId == EdgeIterator.NO_EDGE) throw new IllegalStateException("call next before detaching or setEdgeId (edgeId:" + edgeId + " vs. next " + nextEdgeId + ")"); EdgeIterable iter = edgeAccess.createSingleEdge(filter); boolean ret; if (reverseArg) { ret = iter.init(edgeId, baseNode); // for #162 iter.reverse = !reverse; } else ret = iter.init(edgeId, adjNode); assert ret; return iter; } }
@Override public final boolean next() { while (true) { if (nextEdgeId == EdgeIterator.NO_EDGE) return false; selectEdgeAccess(); edgePointer = edgeAccess.toPointer(nextEdgeId); edgeId = nextEdgeId; adjNode = edgeAccess.getOtherNode(baseNode, edgePointer); reverse = baseNode > adjNode; freshFlags = false; // position to next edge nextEdgeId = edgeAccess.getEdgeRef(baseNode, adjNode, edgePointer); assert nextEdgeId != edgeId : ("endless loop detected for base node: " + baseNode + ", adj node: " + adjNode + ", edge pointer: " + edgePointer + ", edge: " + edgeId); if (filter.accept(this)) return true; } }
/** * Create edge between nodes a and b * <p> * * @return EdgeIteratorState of newly created edge */ @Override public EdgeIteratorState edge(int nodeA, int nodeB) { if (isFrozen()) throw new IllegalStateException("Cannot create edge if graph is already frozen"); ensureNodeIndex(Math.max(nodeA, nodeB)); int edgeId = edgeAccess.internalEdgeAdd(nextEdgeId(), nodeA, nodeB); EdgeIterable iter = new EdgeIterable(this, edgeAccess, EdgeFilter.ALL_EDGES); boolean ret = iter.init(edgeId, nodeB); assert ret; if (extStorage.isRequireEdgeField()) iter.setAdditionalField(extStorage.getDefaultEdgeFieldValue()); return iter; }
@Override public EdgeIteratorState detach(boolean reverseArg) { if (edgeId == nextEdgeId || edgeId == EdgeIterator.NO_EDGE) throw new IllegalStateException("call next before detaching or setEdgeId (edgeId:" + edgeId + " vs. next " + nextEdgeId + ")"); EdgeIterable iter = edgeAccess.createSingleEdge(filter); boolean ret; if (reverseArg) { ret = iter.init(edgeId, baseNode); // for #162 iter.reverse = !reverse; } else ret = iter.init(edgeId, adjNode); assert ret; return iter; } }
@Override public EdgeIteratorState detach(boolean reverseArg) { if (edgeId == nextEdgeId || edgeId == EdgeIterator.NO_EDGE) throw new IllegalStateException("call next before detaching or setEdgeId (edgeId:" + edgeId + " vs. next " + nextEdgeId + ")"); EdgeIterable iter = edgeAccess.createSingleEdge(filter); boolean ret; if (reverseArg) { ret = iter.init(edgeId, baseNode); // for #162 iter.reverse = !reverse; } else ret = iter.init(edgeId, adjNode); assert ret; return iter; } }
@Override public EdgeExplorer createEdgeExplorer(EdgeFilter filter) { return new EdgeIterable(this, edgeAccess, filter); }
@Override public EdgeExplorer createEdgeExplorer(EdgeFilter filter) { return new EdgeIterable(this, edgeAccess, filter); }