Skip to content

Commit 1890b61

Browse files
committed
Bugfixes
1 parent 791ff00 commit 1890b61

File tree

4 files changed

+39
-42
lines changed

4 files changed

+39
-42
lines changed

graphhopper-teavm/src/main/java/com/graphhopper/teavm/DataEntry.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,7 @@ public interface DataEntry extends JSObject {
2020

2121
@JSProperty
2222
String getHeader();
23+
24+
@JSProperty
25+
int getLength();
2326
}

graphhopper-teavm/src/main/java/com/graphhopper/teavm/GraphhopperJsonGenerator.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,23 @@ public static void main(String[] args) throws IOException {
3232
byte[] headerBytes = new byte[80];
3333
for (int i = 0; i < 20; ++i) {
3434
int val = dataAccess.getHeader(i * 4);
35-
headerBytes[i * 4 + 0] = (byte)(val >>> 24);
36-
headerBytes[i * 4 + 1] = (byte)(val >>> 16);
37-
headerBytes[i * 4 + 2] = (byte)(val >>> 8);
38-
headerBytes[i * 4 + 3] = (byte)val;
35+
headerBytes[i * 4 + 0] = (byte)val;
36+
headerBytes[i * 4 + 1] = (byte)(val >>> 8);
37+
headerBytes[i * 4 + 2] = (byte)(val >>> 16);
38+
headerBytes[i * 4 + 3] = (byte)(val >>> 24);
3939
}
4040
out.print("\"header\":\"" + Base64.encode(headerBytes) + "\",");
41+
out.print("\"length\":" + dataAccess.getCapacity() + ",");
4142
out.println("\"data\":[");
4243

4344
for (int i = 0; i < dataAccess.getCapacity(); i += buffer.length) {
4445
int sz = (int)(Math.min(i + buffer.length, dataAccess.getCapacity()) - i);
4546
for (int j = 0; j < sz; j += 4) {
4647
int val = dataAccess.getInt(i + j);
47-
buffer[j + 0] = (byte)(val >>> 24);
48-
buffer[j + 1] = (byte)(val >>> 16);
49-
buffer[j + 2] = (byte)(val >>> 8);
50-
buffer[j + 3] = (byte)(val >>> 0);
48+
buffer[j + 0] = (byte)(val >>> 0);
49+
buffer[j + 1] = (byte)(val >>> 8);
50+
buffer[j + 2] = (byte)(val >>> 16);
51+
buffer[j + 3] = (byte)(val >>> 24);
5152
}
5253
if (i > 0) {
5354
out.println(",");

graphhopper-teavm/src/main/java/com/graphhopper/teavm/InMemoryDataAccess.java

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -145,42 +145,34 @@ public final short getShort( long bytePos )
145145
@Override
146146
public void setBytes( long bytePos, byte[] values, int length )
147147
{
148-
assert length <= segmentSizeInBytes : "the length has to be smaller or equal to the segment size: " + length + " vs. " + segmentSizeInBytes;
149148
assert segmentSizePower > 0 : "call create or loadExisting before usage!";
150-
int bufferIndex = (int) (bytePos >>> segmentSizePower);
151-
int index = (int) (bytePos & indexDivisor);
152-
byte[] seg = segments[bufferIndex];
153-
int delta = index + length - segmentSizeInBytes;
154-
if (delta > 0)
155-
{
156-
length -= delta;
157-
System.arraycopy(values, 0, seg, index, length);
158-
seg = segments[bufferIndex + 1];
159-
System.arraycopy(values, length, seg, 0, delta);
160-
} else
161-
{
162-
System.arraycopy(values, 0, seg, index, length);
149+
int sourceIndex = 0;
150+
while (length > 0) {
151+
int index = (int) (bytePos & indexDivisor);
152+
int bufferIndex = (int) (bytePos >>> segmentSizePower);
153+
byte[] seg = segments[bufferIndex];
154+
int localLength = Math.min(length, segmentSizeInBytes - index);
155+
System.arraycopy(values, sourceIndex, seg, index, localLength);
156+
bytePos += localLength;
157+
sourceIndex += localLength;
158+
length -= localLength;
163159
}
164160
}
165161

166162
@Override
167163
public void getBytes( long bytePos, byte[] values, int length )
168164
{
169-
assert length <= segmentSizeInBytes : "the length has to be smaller or equal to the segment size: " + length + " vs. " + segmentSizeInBytes;
170165
assert segmentSizePower > 0 : "call create or loadExisting before usage!";
171166
int bufferIndex = (int) (bytePos >>> segmentSizePower);
172-
int index = (int) (bytePos & indexDivisor);
173-
byte[] seg = segments[bufferIndex];
174-
int delta = index + length - segmentSizeInBytes;
175-
if (delta > 0)
176-
{
177-
length -= delta;
178-
System.arraycopy(seg, index, values, 0, length);
179-
seg = segments[bufferIndex + 1];
180-
System.arraycopy(seg, 0, values, length, delta);
181-
} else
182-
{
183-
System.arraycopy(seg, index, values, 0, length);
167+
int targetIndex = 0;
168+
while (length > 0) {
169+
int index = (int) (bytePos & indexDivisor);
170+
byte[] seg = segments[bufferIndex];
171+
int localLength = Math.min(length, segmentSizeInBytes - index);
172+
System.arraycopy(seg, index, values, targetIndex, localLength);
173+
bytePos += localLength;
174+
targetIndex += localLength;
175+
length -= localLength;
184176
}
185177
}
186178

graphhopper-teavm/src/main/java/com/graphhopper/teavm/Main.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,18 @@ private static void readAll(InMemoryDirectory directory) {
4848
DataEntry entry = data.get(i);
4949
DataAccess file = directory.find(entry.getName());
5050
file.setSegmentSize(entry.getSegmentSize());
51-
long pos = 0;
51+
file.create(entry.getLength());
52+
int pos = 0;
5253
for (int j = 0; j < entry.getData().getLength(); ++j) {
53-
byte[] bytes = Base64.decode(JS.unwrapString(entry.getData().get(0)));
54-
for (int k = 0; k < bytes.length; k += 4) {
55-
int val = (bytes[k]) | (bytes[k + 1] << 8) | (bytes[k + 2] << 16) | (bytes[k + 3] << 24);
56-
file.setInt(j + k, val);
57-
}
54+
byte[] bytes = Base64.decode(JS.unwrapString(entry.getData().get(j)));
5855
file.setBytes(pos, bytes, bytes.length);
5956
pos += bytes.length;
6057
}
61-
file.setHeader(i, i);
58+
byte[] header = Base64.decode(entry.getHeader());
59+
for (int j = 0; j < 80; j += 4) {
60+
int val = (header[j]) | (header[j + 1] << 8) | (header[j + 2] << 16) | (header[j + 3] << 24);
61+
file.setHeader(j, val);
62+
}
6263
}
6364
}
6465
}

0 commit comments

Comments
 (0)