@Override final void setEdgeRef(int nodeId, int edgeId) { nodes.setInt((long) nodeId * nodeEntryBytes + N_EDGE_REF, edgeId); }
@Override final void setEdgeRef(int nodeId, int edgeId) { nodesCH.setInt((long) nodeId * nodeCHEntryBytes + N_CH_REF, edgeId); }
final void invalidateEdge(long edgePointer) { edges.setInt(edgePointer + E_NODEA, NO_NODE); }
@Override public final void setLevel(int nodeIndex, int level) { checkNodeId(nodeIndex); nodesCH.setInt((long) nodeIndex * nodeCHEntryBytes + N_LEVEL, level); }
public void setAdditionalEdgeField(long edgePointer, int value) { if (extStorage.isRequireEdgeField() && E_ADDITIONAL >= 0) edges.setInt(edgePointer + E_ADDITIONAL, value); else throw new AssertionError("This graph does not support an additional edge field."); }
private void setName(long edgePointer, String name) { int nameIndexRef = (int) nameIndex.put(name); if (nameIndexRef < 0) throw new IllegalStateException("Too many names are stored, currently limited to int pointer"); edges.setInt(edgePointer + E_NAME, nameIndexRef); }
/** * Initializes the node area with the empty edge value and default additional value. */ void initNodeRefs(long oldCapacity, long newCapacity) { for (long pointer = oldCapacity + N_EDGE_REF; pointer < newCapacity; pointer += nodeEntryBytes) { nodes.setInt(pointer, EdgeIterator.NO_EDGE); } if (extStorage.isRequireNodeField()) { for (long pointer = oldCapacity + N_ADDITIONAL; pointer < newCapacity; pointer += nodeEntryBytes) { nodes.setInt(pointer, extStorage.getDefaultNodeFieldValue()); } } }
final void setDist(long edgePointer, double distance) { edges.setInt(edgePointer + E_DIST, distToInt(distance)); }
@Override public final void setSkippedEdges(int edge1, int edge2) { checkShortcut(true, "setSkippedEdges"); if (EdgeIterator.Edge.isValid(edge1) != EdgeIterator.Edge.isValid(edge2)) { throw new IllegalStateException("Skipped edges of a shortcut needs " + "to be both valid or invalid but they were not " + edge1 + ", " + edge2); } shortcuts.setInt(edgePointer + S_SKIP_EDGE1, edge1); shortcuts.setInt(edgePointer + S_SKIP_EDGE2, edge2); }
@Override public final void setSkippedEdges(int edge1, int edge2) { checkShortcut(true, "setSkippedEdges"); if (EdgeIterator.Edge.isValid(edge1) != EdgeIterator.Edge.isValid(edge2)) { throw new IllegalStateException("Skipped edges of a shortcut needs " + "to be both valid or invalid but they were not " + edge1 + ", " + edge2); } shortcuts.setInt(edgePointer + S_SKIP_EDGE1, edge1); shortcuts.setInt(edgePointer + S_SKIP_EDGE2, edge2); }
@Override public final void setAdditionalNodeField(int index, int additionalValue) { if (that.extStorage.isRequireNodeField() && that.N_ADDITIONAL >= 0) { that.ensureNodeIndex(index); long tmp = (long) index * that.nodeEntryBytes; that.nodes.setInt(tmp + that.N_ADDITIONAL, additionalValue); } else { throw new AssertionError("This graph does not provide an additional node field"); } }
void _freeze() { long maxCapacity = ((long) getNodes()) * nodeCHEntryBytes; nodesCH.ensureCapacity(maxCapacity); long baseCapacity = baseGraph.nodes.getCapacity(); // copy normal edge refs into ch edge refs for (long pointer = N_CH_REF, basePointer = baseGraph.N_EDGE_REF; pointer < maxCapacity; pointer += nodeCHEntryBytes, basePointer += baseGraph.nodeEntryBytes) { if (basePointer >= baseCapacity) throw new IllegalStateException("Cannot copy edge refs into ch graph. " + "pointer:" + pointer + ", cap:" + maxCapacity + ", basePtr:" + basePointer + ", baseCap:" + baseCapacity); nodesCH.setInt(pointer, baseGraph.nodes.getInt(basePointer)); } }
final void connectNewEdge(int fromNode, int otherNode, int newOrExistingEdge) { int edge = getEdgeRef(fromNode); if (edge > EdgeIterator.NO_EDGE) { long edgePointer = toPointer(newOrExistingEdge); long lastLink = _getLinkPosInEdgeArea(fromNode, otherNode, edgePointer); edges.setInt(lastLink, edge); } setEdgeRef(fromNode, newOrExistingEdge); }
private void setWayGeometryAtGeoRef(PointList pillarNodes, long edgePointer, boolean reverse, long geoRef) { int len = pillarNodes.getSize(); int dim = nodeAccess.getDimension(); long geoRefPosition = (long) geoRef * 4; int totalLen = len * dim * 4 + 4; ensureGeometry(geoRefPosition, totalLen); byte[] wayGeometryBytes = createWayGeometryBytes(pillarNodes, reverse); wayGeometry.setBytes(geoRefPosition, wayGeometryBytes, wayGeometryBytes.length); edges.setInt(edgePointer + E_GEO, Helper.toSignedInt(geoRef)); }
@Test public void testExceptionIfNoEnsureCapacityWasCalled() { DataAccess da = createDataAccess(name); assertFalse(da.loadExisting()); // throw some undefined exception if no ensureCapacity was called try { da.setInt(2 * 4, 321); assertTrue(false); } catch (Exception ex) { } }
@Test public void testRenameNoFlush() { DataAccess da = createDataAccess(name); da.create(100); da.setInt(17 * 4, 17); try { da.rename(name + "wow"); assertTrue(false); } catch (Exception ex) { } da.close(); }
@Test public void testLoadClose() { DataAccess da = createDataAccess(name); da.create(300); da.setInt(2 * 4, 321); da.flush(); da.close(); da = createDataAccess(name); assertTrue(da.loadExisting()); assertEquals(321, da.getInt(2 * 4)); da.close(); }
@Test public void textMixRAM2MMAP() { DataAccess da = new RAMDataAccess(name, directory, true, defaultOrder); assertFalse(da.loadExisting()); da.create(100); da.setInt(7 * 4, 123); da.flush(); da.close(); da = createDataAccess(name); assertTrue(da.loadExisting()); assertEquals(123, da.getInt(7 * 4)); da.close(); }