@Override public SubnetworkStorage create(long byteCount) { da.create(2000); da.ensureCapacity(byteCount); return this; }
int getOrigEdgeCount(int edgeId) { edgeId -= maxEdgesCount; if (edgeId < 0) return 1; long tmp = (long) edgeId * 4; originalEdges.ensureCapacity(tmp + 4); return originalEdges.getInt(tmp); } }
@Test public void testSegments() { DataAccess da = createDataAccess(name); da.setSegmentSize(128); da.create(10); assertEquals(1, da.getSegments()); da.ensureCapacity(500); int olds = da.getSegments(); assertTrue(olds > 3); da.setInt(400, 321); da.flush(); da.close(); da = createDataAccess(name); assertTrue(da.loadExisting()); assertEquals(olds, da.getSegments()); assertEquals(321, da.getInt(400)); da.close(); }
@Test public void testCopy() { DataAccess da1 = createDataAccess(name); da1.create(1001 * 4); da1.setHeader(4, 12); da1.setInt(1 * 4, 1); da1.setInt(123 * 4, 321); da1.setInt(1000 * 4, 1111); DataAccess da2 = createDataAccess(name + "2"); da2.create(10); da1.copyTo(da2); assertEquals(12, da2.getHeader(4)); assertEquals(1, da2.getInt(1 * 4)); assertEquals(321, da2.getInt(123 * 4)); assertEquals(1111, da2.getInt(1000 * 4)); da2.setInt(1 * 4, 2); assertEquals(2, da2.getInt(1 * 4)); da2.flush(); da1.flush(); // make sure they are independent! assertEquals(1, da1.getInt(1 * 4)); da1.close(); da2.close(); }
private int fillEmptyIndices(GHBitSet filledIndices) { int len = latSize * lonSize; DataAccess indexCopy = new RAMDirectory().find("temp_index_copy"); indexCopy.setSegmentSize(index.getSegmentSize()).create(index.getCapacity()); GHBitSet indicesCopy = new GHBitSetImpl(len); int initializedCounter = filledIndices.getCardinality(); index.copyTo(indexCopy); filledIndices.copyTo(indicesCopy); initializedCounter = filledIndices.getCardinality(); index.setInt(to * 4, indexCopy.getInt(from * 4)); takenFrom[to] = takenFrom[from]; filledIndices.add(to);
@Test public void testHeader() { DataAccess da = createDataAccess(name); da.create(300); da.setHeader(7 * 4, 123); assertEquals(123, da.getHeader(7 * 4)); da.setHeader(10 * 4, Integer.MAX_VALUE / 3); assertEquals(Integer.MAX_VALUE / 3, da.getHeader(10 * 4)); da.setHeader(11 * 4, Helper.degreeToInt(123.321)); assertEquals(123.321, Helper.intToDegree(da.getHeader(11 * 4)), 1e-4); da.flush(); da.close(); da = createDataAccess(name); assertTrue(da.loadExisting()); assertEquals(123, da.getHeader(7 * 4)); da.close(); }
@Test public void testEnsureCapacity() { DataAccess da = createDataAccess(name); da.create(128); da.setInt(31 * 4, 200); assertEquals(200, da.getInt(31 * 4)); da.ensureCapacity(2 * 128); assertEquals(200, da.getInt(31 * 4)); // now it shouldn't fail da.setInt(32 * 4, 220); assertEquals(220, da.getInt(32 * 4)); da.close(); // ensure some bigger area da = createDataAccess(name); da.create(200 * 4); da.ensureCapacity(600 * 4); da.close(); }
@Test public void testSet_GetBytes() { DataAccess da = createDataAccess(name); da.create(300); assertEquals(128, da.getSegmentSize()); byte[] bytes = BitUtil.BIG.fromInt(Integer.MAX_VALUE / 3); da.setBytes(8, bytes, bytes.length); bytes = new byte[4]; da.getBytes(8, bytes, bytes.length); assertEquals(Integer.MAX_VALUE / 3, BitUtil.BIG.toInt(bytes)); da.setBytes(127, bytes, bytes.length); da.getBytes(127, bytes, bytes.length); assertEquals(Integer.MAX_VALUE / 3, BitUtil.BIG.toInt(bytes)); da.close(); long bytePos = 4294967296L + 11111; int segmentSizePower = 24; int segmentSizeInBytes = 1 << segmentSizePower; int indexDivisor = segmentSizeInBytes - 1; int bufferIndex = (int) (bytePos >>> segmentSizePower); int index = (int) (bytePos & indexDivisor); assertEquals(256, bufferIndex); assertEquals(11111, index); }
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)); } }
@Override public DataAccess copyTo(DataAccess da) { copyHeader(da); da.ensureCapacity(getCapacity()); long cap = getCapacity(); // currently get/setBytes does not support copying more bytes then segmentSize int segSize = Math.min(da.getSegmentSize(), getSegmentSize()); byte[] bytes = new byte[segSize]; boolean externalIntBased = ((AbstractDataAccess) da).isIntBased(); for (long bytePos = 0; bytePos < cap; bytePos += segSize) { // read if (isIntBased()) { for (int offset = 0; offset < segSize; offset += 4) { bitUtil.fromInt(bytes, getInt(bytePos + offset), offset); } } else { getBytes(bytePos, bytes, segSize); } // write if (externalIntBased) { for (int offset = 0; offset < segSize; offset += 4) { da.setInt(bytePos + offset, bitUtil.toInt(bytes, offset)); } } else { da.setBytes(bytePos, bytes, segSize); } } return da; }
@Override public boolean loadExisting() { if (!turnCosts.loadExisting()) return false; turnCostsEntryBytes = turnCosts.getHeader(0); turnCostsCount = turnCosts.getHeader(4); return true; }
@Override public synchronized boolean loadExisting() { if (!da.loadExisting()) return false; int len = (int) da.getCapacity(); byte[] bytes = new byte[len]; da.getBytes(0, bytes, len); try { loadProperties(map, new StringReader(new String(bytes, UTF_CS))); return true; } catch (IOException ex) { throw new IllegalStateException(ex); } }
@Test public void testSegmentSize() { DataAccess da = createDataAccess(name); da.setSegmentSize(20); assertEquals(128, da.getSegmentSize()); da.close(); }
@Override public long getCapacity() { return da.getCapacity(); } }
@Override public double getLatitude(int id) { int intVal = da.getInt((long) id * rowSizeInBytes + LAT); return Helper.intToDegree(intVal); }