Hi
And here is the patch for just the reading side.
I decided that it was best to leave in 'byte get()' as there are many
places where a byte is used to hold the result and a cast would be
needed for 'int get1()'.
The tests pass, but there is more scope for getting this patch wrong
so needs some good testing.
Also display project would have to be patched to match.
..Steve
Index: src/uk/me/parabola/imgfmt/app/BufferedImgFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/BufferedImgFileReader.java b/trunk/src/uk/me/parabola/imgfmt/app/BufferedImgFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/BufferedImgFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/BufferedImgFileReader.java (working copy)
@@ -100,11 +100,10 @@
*
* @return The 2 byte integer that was read.
*/
- public char getChar() throws ReadFailedException {
- // Slow but sure implementation
+ public int get2() throws ReadFailedException {
byte b1 = get();
byte b2 = get();
- return (char) (((b2 & 0xff) << 8) + (b1 & 0xff));
+ return (b2 << 8) + (b1 & 0xff);
}
/**
@@ -124,17 +123,12 @@
;
}
- public int getu3() throws ReadFailedException {
- return get3() & 0xffffff;
- }
-
/**
- * Read in a 4 byte value.
+ * Read in a 4 byte signed value.
*
* @return A 4 byte integer.
*/
- public int getInt() throws ReadFailedException {
- // Slow but sure implementation
+ public int get4() throws ReadFailedException {
byte b1 = get();
byte b2 = get();
byte b3 = get();
@@ -148,10 +142,10 @@
public int getUint(int n) throws ReadFailedException {
switch (n) {
- case 1: return get() & 0xff;
- case 2: return getChar();
- case 3: return getu3();
- case 4: return getInt();
+ case 1: return get1u();
+ case 2: return get2u();
+ case 3: return get3u();
+ case 4: return get4();
default: // this is a programming error so exit
throw new MapFailedException("bad integer size " + n);
}
Index: src/uk/me/parabola/imgfmt/app/CommonHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/CommonHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/CommonHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/CommonHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/CommonHeader.java (working copy)
@@ -79,7 +79,7 @@
*/
public final void readHeader(ImgFileReader reader) throws ReadFailedException {
reader.position(0);
- headerLength = reader.getChar();
+ headerLength = reader.get2u();
byte[] bytes = reader.get(TYPE_LEN);
try {
type = new String(bytes, "ascii");
Index: src/uk/me/parabola/imgfmt/app/ImgFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/ImgFileReader.java b/trunk/src/uk/me/parabola/imgfmt/app/ImgFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/ImgFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/ImgFileReader.java (working copy)
@@ -48,11 +48,23 @@
*/
public byte get() throws ReadFailedException;
+ public default int get1() throws ReadFailedException {
+ return get();
+ }
+
+ public default int get1u() throws ReadFailedException {
+ return get() & 0xff;
+ }
+
+ public int get2() throws ReadFailedException;
+
/**
* Read in two bytes. Done in the correct byte order.
* @return The 2 byte integer that was read.
*/
- public char getChar() throws ReadFailedException;
+ public default int get2u() throws ReadFailedException {
+ return get2() & 0xffff;
+ }
/**
* Get a 3byte signed quantity.
@@ -68,14 +80,20 @@
* @return The value read.
* @throws ReadFailedException When the file cannot be read.
*/
- public int getu3() throws ReadFailedException;
+ public default int get3u() throws ReadFailedException {
+ return get3() & 0xffffff;
+ }
/**
- * Read in a 4 byte value.
+ * Read in a 4 byte signed value.
* @return A 4 byte integer.
*/
- public int getInt() throws ReadFailedException;
+ public int get4() throws ReadFailedException;
+ public default long get4u() throws ReadFailedException {
+ return get4() & 0xffff_ffffL;
+ }
+
/**
* Read a variable sized integer. The size is given.
* @param n The size of the integer to read. Must be 1 to 4.
Index: src/uk/me/parabola/imgfmt/app/Section.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/Section.java b/trunk/src/uk/me/parabola/imgfmt/app/Section.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/Section.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/Section.java (working copy)
@@ -117,10 +117,10 @@
}
public void readSectionInfo(ImgFileReader reader, boolean withItemSize) {
- setPosition(reader.getInt());
- setSize(reader.getInt());
+ setPosition(reader.get4());
+ setSize(reader.get4());
if (withItemSize)
- setItemSize(reader.getChar());
+ setItemSize((char) reader.get2u());
}
public SectionWriter makeSectionWriter(ImgFileWriter writer) {
Index: src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java b/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java (working copy)
@@ -139,7 +139,7 @@
reader.position(start);
int index = 1;
while (reader.position() < end) {
- int offset = reader.getu3();
+ int offset = reader.get3u();
Label label = fetchLabel(offset);
if (label != null) {
@@ -167,8 +167,8 @@
reader.position(start);
int index = 1;
while (reader.position() < end) {
- int country = reader.getChar();
- int offset = reader.getu3();
+ int country = reader.get2u();
+ int offset = reader.get3u();
Label label = fetchLabel(offset);
if (label != null) {
Region region = new Region(countries.get(country));
@@ -200,8 +200,8 @@
while (reader.position() < end) {
// First is either a label offset or a point/subdiv combo, we
// don't know until we have read further
- int label = reader.getu3();
- int info = reader.getChar();
+ int label = reader.get3u();
+ int info = reader.get2u();
City city;
if ((info & 0x4000) == 0) {
@@ -344,7 +344,7 @@
while (reader.position() < end) {
int poiOffset = position() - start;
- int val = reader.getu3();
+ int val = reader.get3u();
int labelOffset = val & 0x3fffff;
@@ -390,7 +390,7 @@
byte b = reader.get();
if ((b & 0x80) == 0) {
int mpoffset = (b << 16) & 0xff0000;
- mpoffset |= reader.getChar() & 0xffff;
+ mpoffset |= reader.get2u();
poi.setComplexStreetNumber(fetchLabel(mpoffset));
} else {
@@ -399,7 +399,7 @@
}
if (hasStreet) {
- int streetNameOffset = reader.getu3();// label for street
+ int streetNameOffset = reader.get3u();// label for street
Label label = fetchLabel(streetNameOffset);
poi.setStreetName(label);
}
@@ -419,7 +419,7 @@
if ((b & 0x80) == 0) {
// Yes this is a bit strange it is a byte followed by a char
int mpoffset = (b << 16) & 0xff0000;
- mpoffset |= reader.getChar() & 0xffff;
+ mpoffset |= reader.get2u();
poi.setComplexPhoneNumber(fetchLabel(mpoffset));
} else {
@@ -428,7 +428,7 @@
}
if (hasHighwayExit) {
- int lblinfo = reader.getu3();
+ int lblinfo = reader.get3u();
int highwayLabelOffset = lblinfo & 0x3FFFF;
boolean indexed = (lblinfo & 0x800000) != 0;
boolean overnightParking = (lblinfo & 0x400000) != 0;
Index: src/uk/me/parabola/imgfmt/app/lbl/LBLHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/lbl/LBLHeader.java (working copy)
@@ -68,8 +68,8 @@
* @param reader The header is read from here.
*/
protected void readFileHeader(ImgFileReader reader) {
- labelStart = reader.getInt();
- labelSize = reader.getInt();
+ labelStart = reader.get4();
+ labelSize = reader.get4();
offsetMultiplier = 1 << reader.get();
encodingType = reader.get();
@@ -76,11 +76,11 @@
// Read the places part of the header.
placeHeader.readFileHeader(reader);
- int codepage = reader.getChar();
- int id1 = reader.getChar();
- int id2 = reader.getChar();
- int descOff = reader.getInt();
- int descLen = reader.getInt();
+ int codepage = reader.get2u();
+ int id1 = reader.get2u();
+ int id2 = reader.get2u();
+ int descOff = reader.get4();
+ int descLen = reader.get4();
reader.position(descOff);
byte[] bytes = reader.get(descLen);
Index: src/uk/me/parabola/imgfmt/app/lbl/PlacesHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/lbl/PlacesHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/lbl/PlacesHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/lbl/PlacesHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/lbl/PlacesHeader.java (working copy)
@@ -125,38 +125,38 @@
reader.position(0x1f);
country.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
region.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
city.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
poiIndex.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
poiProperties.readSectionInfo(reader, false);
reader.get(); // offset multiplier
POIGlobalFlags = reader.get();
- reader.getChar();
+ reader.get2u();
reader.get();
poiTypeIndex.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
zip.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
highway.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
exitFacility.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
highwayData.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
}
int getLastPos() {
Index: src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java b/trunk/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java (working copy)
@@ -91,13 +91,13 @@
RoadDef road = new RoadDef(++record, off, null);
readLabels(reader, road);
byte netFlags = reader.get();
- /*int len =*/ reader.getu3();
+ /*int len =*/ reader.get3u();
int[] counts = new int[24];
int level = 0;
while (level < 24) {
int n = reader.get();
- counts[level++] = (n & 0x7f);
+ counts[level++] = n & 0x7f;
if ((n & 0x80) != 0)
break;
}
@@ -106,12 +106,12 @@
int c = counts[i];
for (int j = 0; j < c; j++) {
/*byte b =*/ reader.get();
- /*char sub =*/ reader.getChar();
+ /*char sub =*/ reader.get2u();
}
}
if ((netFlags & RoadDef.NET_FLAG_ADDRINFO) != 0) {
- char flags2 = reader.getChar();
+ int flags2 = reader.get2u();
int zipFlag = (flags2 >> 10) & 0x3;
int cityFlag = (flags2 >> 12) & 0x3;
@@ -130,7 +130,7 @@
}
if ((netFlags & RoadDef.NET_FLAG_NODINFO) != 0) {
- int nodFlags = reader.get();
+ int nodFlags = reader.get1u();
int nbytes = nodFlags & 0x3;
if (nbytes > 0) {
/*int nod = */reader.getUint(nbytes+1);
@@ -159,10 +159,10 @@
} else if (flag == 3) {
// there is no item
} else if (flag == 0) {
- int n = reader.get() & 0xff;
+ int n = reader.get1u();
parseList(reader, n, size, indexes);
} else if (flag == 1) {
- int n = reader.getChar();
+ int n = reader.get2u();
parseList(reader, n, size, indexes);
} else {
assert false : "flag is " + flag;
@@ -174,13 +174,13 @@
long endPos = reader.position() + n;
int node = 0; // not yet used
while (reader.position() < endPos) {
- int initFlag = reader.get() & 0xff;
- int skip = (initFlag & 0x1f);
+ int initFlag = reader.get1u();
+ int skip = initFlag & 0x1f;
initFlag >>= 5;
if (initFlag == 7) {
// Need to read another byte
- initFlag = reader.get() & 0xff;
- skip |= ((initFlag & 0x1f) << 5);
+ initFlag = reader.get1u();
+ skip |= (initFlag & 0x1f) << 5;
initFlag >>= 5;
}
node += skip + 1;
@@ -222,9 +222,9 @@
private void fetchNumber(ImgFileReader reader, int numberFlag) {
int n = 0;
if (numberFlag == 0) {
- n = reader.get();
+ n = reader.get1u();
} else if (numberFlag == 1) {
- n = reader.getChar();
+ n = reader.get2u();
} else if (numberFlag == 3) {
// There is no block
return;
@@ -238,7 +238,7 @@
private void readLabels(ImgFileReader reader, RoadDef road) {
for (int i = 0; i < 4; i++) {
- int lab = reader.getu3();
+ int lab = reader.get3u();
Label label = labels.fetchLabel(lab & 0x7fffff);
road.addLabel(label);
if ((lab & 0x800000) != 0)
@@ -257,7 +257,7 @@
int start = netHeader.getRoadDefinitionsStart();
for (int off : offsets) {
reader.position(start + off);
- int labelOffset = reader.getu3();
+ int labelOffset = reader.get3u();
// TODO what if top bit is not set?, there can be more than one name and we will miss them
offsetLabelMap.put(off, labelOffset & 0x7fffff);
}
@@ -277,7 +277,7 @@
Set<Integer> allOffsets = new HashSet<>();
while (reader.position() < end) {
- int net1 = reader.getu3();
+ int net1 = reader.get3u();
// The offset is stored in the bottom 22 bits. The top 2 bits are an index into the list
// of lbl pointers in the net1 entry.
Index: src/uk/me/parabola/imgfmt/app/net/NETHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/net/NETHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/net/NETHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/net/NETHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/net/NETHeader.java (working copy)
@@ -60,7 +60,7 @@
sortedRoads.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
reader.get();
reader.get();
}
Index: src/uk/me/parabola/imgfmt/app/net/NODHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/net/NODHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/net/NODHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/net/NODHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/net/NODHeader.java (working copy)
@@ -63,23 +63,23 @@
*/
protected void readFileHeader(ImgFileReader reader) throws ReadFailedException {
nodes.readSectionInfo(reader, false);
- flags = reader.getChar();
- reader.getChar();
- align = reader.get();
- mult1 = reader.get();
- tableARecordLen = reader.getChar();
+ flags = reader.get2u();
+ reader.get2u();
+ align = reader.get1u();
+ mult1 = reader.get1u();
+ tableARecordLen = reader.get2u();
roads.readSectionInfo(reader, false);
- reader.getInt();
+ reader.get4();
boundary.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
if (getHeaderLength() > 0x3f) {
highClassBoundary.readSectionInfo(reader, false);
- classBoundaries[0] = reader.getInt();
- classBoundaries[1] = classBoundaries[0] + reader.getInt();
- classBoundaries[2] = classBoundaries[1] + reader.getInt();
- classBoundaries[3] = classBoundaries[2] + reader.getInt();
- classBoundaries[4] = classBoundaries[3] + reader.getInt();
+ classBoundaries[0] = reader.get4();
+ classBoundaries[1] = classBoundaries[0] + reader.get4();
+ classBoundaries[2] = classBoundaries[1] + reader.get4();
+ classBoundaries[3] = classBoundaries[2] + reader.get4();
+ classBoundaries[4] = classBoundaries[3] + reader.get4();
}
}
Index: src/uk/me/parabola/imgfmt/app/srt/SRTHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/srt/SRTHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/srt/SRTHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/srt/SRTHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/srt/SRTHeader.java (working copy)
@@ -60,9 +60,9 @@
}
protected void readFileHeader(ImgFileReader reader) throws ReadFailedException {
- reader.getChar(); // expected: 1
- header2.setPosition(reader.getInt());
- header2.setSize(reader.getChar());
+ reader.get2u(); // expected: 1
+ header2.setPosition(reader.get4());
+ header2.setSize(reader.get2u());
}
/**
Index: src/uk/me/parabola/imgfmt/app/srt/SrtFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/srt/SrtFileReader.java b/trunk/src/uk/me/parabola/imgfmt/app/srt/SrtFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/srt/SrtFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/srt/SrtFileReader.java (working copy)
@@ -71,14 +71,14 @@
private void readTableHeader() {
ImgFileReader reader = getReader();
reader.position(tableHeader.getPosition());
- int len = reader.getChar();
+ int len = reader.get2u();
sort.setHeader3Len(len);
- sort.setId1(reader.getChar());
- sort.setId2(reader.getChar());
- sort.setCodepage(reader.getChar());
+ sort.setId1(reader.get2u());
+ sort.setId2(reader.get2u());
+ sort.setCodepage(reader.get2u());
if (sort.getCodepage() == 65001)
sort.setMulti(true);
- reader.getInt(); //?
+ reader.get4(); //?
characterTable.readSectionInfo(reader, true);
reader.position(reader.position() + 6); // padding?
srt5.readSectionInfo(reader, true);
@@ -87,8 +87,8 @@
srt6.readSectionInfo(reader, false);
}
if (len > 0x34) {
- reader.getInt();
- int maxCodeBlock = reader.getInt();
+ reader.get4();
+ int maxCodeBlock = reader.get4();
sort.setMaxPage(maxCodeBlock);
srt7.readSectionInfo(reader, true);
reader.position(reader.position() + 6); // padding?
@@ -110,7 +110,7 @@
int block = 1;
for (int i = 0; i < srt7.getNumItems(); i++) {
- int val = reader.getInt();
+ int val = reader.get4();
if (val >= 0)
offsetToBlock.put(val/srt8.getItemSize(), block);
block++;
@@ -127,7 +127,7 @@
Integer nblock = offsetToBlock.get(i);
if (nblock != null)
block = nblock;
- int flags = reader.get() & 0xff;
+ int flags = reader.get1u();
CodePosition cp = readCharPosition(reclen-1);
int ch = block*256 + (i % 256);
@@ -149,7 +149,7 @@
long start = tableHeader.getPosition() + characterTable.getPosition();
reader.position(start);
for (int ch = 1; ch <= characterTable.getNumItems(); ch++) {
- int flags = reader.get() & 0xff;
+ int flags = reader.get1u();
CodePosition cp = readCharPosition(rs-1);
if ((flags & 0xf0) != 0) {
sort.add(ch, countExp + 1, 0, 0, flags);
@@ -172,7 +172,7 @@
CodePosition cp = new CodePosition();
int rec;
if (posLength == 2) {
- rec = reader.getChar();
+ rec = reader.get2u();
cp.setPrimary((char) (rec & 0xff));
cp.setSecondary((byte) ((rec >> 8) & 0xf));
cp.setTertiary((byte) ((rec >> 12) & 0xf));
@@ -183,7 +183,7 @@
cp.setSecondary((byte) ((rec >> 8) & 0xf));
cp.setTertiary((byte) ((rec >> 12) & 0xf));
} else if (posLength == 4) {
- rec = reader.getInt();
+ rec = reader.get4();
cp.setPrimary((char) (rec & 0xffff));
cp.setSecondary((byte) ((rec >> 16) & 0xff));
cp.setTertiary((byte) ((rec >> 24) & 0xff));
Index: src/uk/me/parabola/imgfmt/app/trergn/RGNFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNFileReader.java b/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNFileReader.java (working copy)
@@ -101,7 +101,7 @@
Point p = new Point(sd);
byte t = reader.get();
- int val = reader.getu3();
+ int val = reader.get3u();
boolean hasSubtype = false;
if ((val & 0x800000) != 0)
hasSubtype = true;
@@ -124,8 +124,8 @@
}
p.setLabel(l);
- p.setDeltaLong((short)reader.getChar());
- p.setDeltaLat((short)reader.getChar());
+ p.setDeltaLong(reader.get2());
+ p.setDeltaLat(reader.get2());
if (hasSubtype) {
byte st = reader.get();
@@ -151,15 +151,15 @@
while (position() < end) {
Point p = new Point(sd);
- int type = reader.get() << 8;
+ int type = reader.get1u() << 8;
byte b = reader.get();
type |= 0x10000 + (b & 0x1f);
p.setType(type);
- p.setDeltaLong((short)reader.getChar());
- p.setDeltaLat((short)reader.getChar());
+ p.setDeltaLong(reader.get2());
+ p.setDeltaLat(reader.get2());
Label l;
if ((b & 0x20) != 0 ){
- int labelOffset = reader.getu3();
+ int labelOffset = reader.get3u();
boolean hasPoi = (labelOffset & 0x400000) != 0;
if (hasPoi) {
POIRecord record = lblFile.fetchPoi(labelOffset);
@@ -269,7 +269,7 @@
line.setType(type & 0x3f);
line.setDirection((type & 0x40) != 0);
}
- int labelOffset = reader.getu3();
+ int labelOffset = reader.get3u();
// Extra bit (for bit stream)
boolean extra = (labelOffset & 0x400000) != 0;
Label label;
@@ -285,13 +285,13 @@
line.setLabel(label);
- line.setDeltaLong((short)reader.getChar());
- line.setDeltaLat((short)reader.getChar());
+ line.setDeltaLong(reader.get2());
+ line.setDeltaLat(reader.get2());
int len;
if ((type & 0x80) == 0)
- len = reader.get() & 0xff;
+ len = reader.get1u();
else
- len = reader.getChar();
+ len = reader.get2u();
int base = reader.get();
@@ -309,15 +309,15 @@
* @param line The line or shape that is to be populated.
*/
private void readLineCommonExtType(ImgFileReader reader, Subdivision div, Polyline line) {
- int type = reader.get();
- type = (type & 0xff) << 8;
- byte b1 = reader.get();
+ int type = reader.get1u();
+ type <<= 8;
+ int b1 = reader.get1u();
boolean hasExtraBytes = (b1 & 0x80) != 0;
boolean hasLabel = (b1 & 0x20) != 0;
type |= 0x10000 + (b1 & 0x1f);
line.setType(type);
- line.setDeltaLong((short)reader.getChar());
- line.setDeltaLat((short)reader.getChar());
+ line.setDeltaLong(reader.get2());
+ line.setDeltaLat(reader.get2());
b1 = reader.get();
int len;
// one byte or two byte length field?
@@ -326,13 +326,13 @@
assert len < 0x7f;
}
else {
- byte b2 = reader.get();
- len = (((b2 & 0xff) << 8) + (b1 & 0xff)) >> 2;
+ int b2 = reader.get1u();
+ len = ((b2 << 8) + b1) >> 2;
assert len >= 0x7f;
}
--len; // the encoded value includes the base field
assert len > 0;
- int base = reader.get();
+ int base = reader.get1u();
byte[] bitstream = reader.get(len);
BitReader br = new BitReader(bitstream);
@@ -340,7 +340,7 @@
readBitStream(br, div, line, false, len, base);
if (hasLabel){
- int labelOffset = reader.getu3();
+ int labelOffset = reader.get3u();
Label label;
if ((labelOffset & 0x800000) == 0) {
label = lblFile.fetchLabel(labelOffset & 0x7fffff);
@@ -546,17 +546,17 @@
pointOffset = 0;
if (sd.needsIndPointPtr()) {
- indPointOffset = reader.getChar();
+ indPointOffset = reader.get2u();
headerLen += 2;
}
if (sd.needsPolylinePtr()) {
- lineOffset = reader.getChar();
+ lineOffset = reader.get2u();
headerLen += 2;
}
if (sd.needsPolygonPtr()) {
- polygonOffset = reader.getChar();
+ polygonOffset = reader.get2u();
headerLen += 2;
}
Index: src/uk/me/parabola/imgfmt/app/trergn/RGNHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/trergn/RGNHeader.java (working copy)
@@ -57,27 +57,27 @@
data.readSectionInfo(reader, false);
if (getHeaderLength() > 29){
- extTypeAreasOffset = reader.getInt();
- extTypeAreasSize = reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- extTypeLinesOffset = reader.getInt();
- extTypeLinesSize = reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- extTypePointsOffset = reader.getInt();
- extTypePointsSize = reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
- reader.getInt();
+ extTypeAreasOffset = reader.get4();
+ extTypeAreasSize = reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ extTypeLinesOffset = reader.get4();
+ extTypeLinesSize = reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ extTypePointsOffset = reader.get4();
+ extTypePointsSize = reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
+ reader.get4();
}
}
@@ -165,4 +165,4 @@
public int getExtTypePointsSize() {
return extTypePointsSize;
}
-}
\ No newline at end of file
+}
Index: src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java b/trunk/src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java (working copy)
@@ -539,11 +539,11 @@
*/
public void readExtTypeOffsetsRecord(ImgFileReader reader,
Subdivision sdPrev, int size) {
- extTypeAreasOffset = reader.getInt();
- extTypeLinesOffset = reader.getInt();
- extTypePointsOffset = reader.getInt();
+ extTypeAreasOffset = reader.get4();
+ extTypeLinesOffset = reader.get4();
+ extTypePointsOffset = reader.get4();
if (size > 12) {
- int kinds = reader.get();
+ reader.get(); // kinds
}
if (size > 13)
reader.get(size-13);
@@ -564,9 +564,9 @@
* Set the sizes for the extended type data. See {@link #writeLastExtTypeOffsetsRecord(ImgFileWriter)}
*/
public void readLastExtTypeOffsetsRecord(ImgFileReader reader, int size) {
- extTypeAreasSize = reader.getInt() - extTypeAreasOffset;
- extTypeLinesSize = reader.getInt() - extTypeLinesOffset;
- extTypePointsSize = reader.getInt() - extTypePointsOffset;
+ extTypeAreasSize = reader.get4() - extTypeAreasOffset;
+ extTypeLinesSize = reader.get4() - extTypeLinesOffset;
+ extTypePointsSize = reader.get4() - extTypePointsOffset;
assert extTypeAreasSize >= 0;
assert extTypeLinesSize >= 0;
assert extTypePointsSize >= 0;
Index: src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java b/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREFileReader.java (working copy)
@@ -94,7 +94,7 @@
reader.position(start);
int subdivNum = 1;
- int lastRgnOffset = reader.getu3();
+ int lastRgnOffset = reader.get3u();
for (int count = 0; count < levelDivs.length && reader.position() < end; count++) {
Subdivision[] divs = levelDivs[count];
@@ -103,16 +103,16 @@
break;
for (int i = 0; i < divs.length; i++) {
- int flags = reader.get();
+ int flags = reader.get1u();
int lon = reader.get3();
int lat = reader.get3();
- int width = reader.getChar() & 0x7fff;
- int height = reader.getChar() & 0xffff;
+ int width = reader.get2u() & 0x7fff;
+ int height = reader.get2u();
if (count < levelDivs.length-1)
- reader.getChar();
+ reader.get2u();
- int endRgnOffset = reader.getu3();
+ int endRgnOffset = reader.get3u();
SubdivData subdivData = new SubdivData(flags,
lat, lon, 2*width, 2*height,
@@ -174,9 +174,9 @@
List<Zoom> mapLevels = new ArrayList<Zoom>();
int end = levelsPos + levelsSize;
while (reader.position() < end) {
- int level = reader.get();
- int nbits = reader.get();
- int ndivs = reader.getChar();
+ int level = reader.get1u();
+ int nbits = reader.get1u();
+ int ndivs = reader.get2u();
Subdivision[] divs = new Subdivision[ndivs];
levelDivs.add(divs);
Index: src/uk/me/parabola/imgfmt/app/trergn/TREHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/trergn/TREHeader.java (working copy)
@@ -116,26 +116,26 @@
log.info("read area is", getBounds());
// more to do...
- mapLevelPos = reader.getInt();
- mapLevelsSize = reader.getInt();
- subdivPos = reader.getInt();
- subdivSize = reader.getInt();
+ mapLevelPos = reader.get4();
+ mapLevelsSize = reader.get4();
+ subdivPos = reader.get4();
+ subdivSize = reader.get4();
copyright.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
poiDisplayFlags = reader.get();
displayPriority = reader.get3();
- reader.getInt();
- reader.getChar();
+ reader.get4();
+ reader.get2u();
reader.get();
polyline.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
polygon.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
points.readSectionInfo(reader, true);
- reader.getInt();
+ reader.get4();
int mapInfoOff = mapLevelPos;
if (subdivPos < mapInfoOff)
@@ -146,10 +146,10 @@
mapInfoSize = mapInfoOff - getHeaderLength();
if (getHeaderLength() > 116) {
reader.position(116);
- mapId = reader.getInt();
+ mapId = reader.get4();
}
if (getHeaderLength() > 120) {
- reader.getInt();
+ reader.get4();
extTypeOffsets.readSectionInfo(reader, true);
}
}
Index: src/uk/me/parabola/imgfmt/app/typ/TYPHeader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/app/typ/TYPHeader.java b/trunk/src/uk/me/parabola/imgfmt/app/typ/TYPHeader.java
--- a/trunk/src/uk/me/parabola/imgfmt/app/typ/TYPHeader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/app/typ/TYPHeader.java (working copy)
@@ -64,34 +64,34 @@
protected void readFileHeader(ImgFileReader reader) {
// Reset position for the real header reading code.
reader.position(COMMON_HEADER_LEN);
- codePage = reader.getChar(); // 1252
- pointData.setPosition(reader.getInt());
- pointData.setSize(reader.getInt());
+ codePage = (char) reader.get2u(); // 1252
+ pointData.setPosition(reader.get4());
+ pointData.setSize(reader.get4());
- lineData.setPosition(reader.getInt());
- lineData.setSize(reader.getInt());
+ lineData.setPosition(reader.get4());
+ lineData.setSize(reader.get4());
- polygonData.setPosition(reader.getInt());
- polygonData.setSize(reader.getInt());
+ polygonData.setPosition(reader.get4());
+ polygonData.setSize(reader.get4());
- familyId = reader.getChar();
- productId = reader.getChar();
+ familyId = (char) reader.get2u();
+ productId = (char) reader.get2u();
- pointIndex.setPosition(reader.getInt());
- pointIndex.setItemSize(reader.getChar());
- pointIndex.setSize(reader.getInt());
+ pointIndex.setPosition(reader.get4());
+ pointIndex.setItemSize((char) reader.get2u());
+ pointIndex.setSize(reader.get4());
- lineIndex.setPosition(reader.getInt());
- lineIndex.setItemSize(reader.getChar());
- lineIndex.setSize(reader.getInt());
+ lineIndex.setPosition(reader.get4());
+ lineIndex.setItemSize((char) reader.get2u());
+ lineIndex.setSize(reader.get4());
- polygonIndex.setPosition(reader.getInt());
- polygonIndex.setItemSize(reader.getChar());
- polygonIndex.setSize(reader.getInt());
+ polygonIndex.setPosition(reader.get4());
+ polygonIndex.setItemSize((char) reader.get2u());
+ polygonIndex.setSize(reader.get4());
- shapeStacking.setPosition(reader.getInt());
- shapeStacking.setItemSize(reader.getChar());
- shapeStacking.setSize(reader.getInt());
+ shapeStacking.setPosition(reader.get4());
+ shapeStacking.setItemSize((char) reader.get2u());
+ shapeStacking.setSize(reader.get4());
}
/**
Index: src/uk/me/parabola/imgfmt/mdxfmt/MdxFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/mdxfmt/MdxFileReader.java b/trunk/src/uk/me/parabola/imgfmt/mdxfmt/MdxFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/mdxfmt/MdxFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/mdxfmt/MdxFileReader.java (working copy)
@@ -41,19 +41,19 @@
private void readMaps() {
for (int i = 0; i < numberOfMaps; i++) {
MapInfo info = new MapInfo();
- info.setHexMapname(reader.getInt());
- info.setProductId(reader.getChar());
- info.setFamilyId(reader.getChar());
- info.setMapname(reader.getInt());
+ info.setHexMapname(reader.get4());
+ info.setProductId((char) reader.get2u());
+ info.setFamilyId((char) reader.get2u());
+ info.setMapname(reader.get4());
maps.add(info);
}
}
private void readHeader() {
- reader.getInt();
- reader.getChar();
- reader.getInt();
- numberOfMaps = reader.getInt();
+ reader.get4();
+ reader.get2u();
+ reader.get4();
+ numberOfMaps = reader.get4();
}
public List<MapInfo> getMaps() {
Index: src/uk/me/parabola/imgfmt/mps/MpsFileReader.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/imgfmt/mps/MpsFileReader.java b/trunk/src/uk/me/parabola/imgfmt/mps/MpsFileReader.java
--- a/trunk/src/uk/me/parabola/imgfmt/mps/MpsFileReader.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/imgfmt/mps/MpsFileReader.java (working copy)
@@ -60,7 +60,7 @@
private void readBlocks() {
byte type;
while ((type = reader.get()) > 0) {
- int len = reader.getChar();
+ int len = reader.get2u();
switch (type) {
case 0x4c:
@@ -79,23 +79,23 @@
private void readMapBlock() {
MapBlock block = new MapBlock(codePage);
- int val = reader.getInt();
+ int val = reader.get4();
block.setIds(val >>> 16, val & 0xffff);
- block.setMapNumber(reader.getInt());
+ block.setMapNumber(reader.get4());
byte[] zString = reader.getZString();
block.setSeriesName(decodeToString(zString));
block.setMapDescription(decodeToString(reader.getZString()));
block.setAreaName(decodeToString(reader.getZString()));
- block.setHexNumber(reader.getInt());
- reader.getInt();
+ block.setHexNumber(reader.get4());
+ reader.get4();
maps.add(block);
}
private void readProductBlock() {
ProductBlock block = new ProductBlock(codePage);
- block.setProductId(reader.getChar());
- block.setFamilyId(reader.getChar());
+ block.setProductId(reader.get2u());
+ block.setFamilyId(reader.get2u());
block.setDescription(decodeToString(reader.getZString()));
products.add(block);
}
Index: src/uk/me/parabola/mkgmap/combiners/FileInfo.java
===================================================================
diff --git a/trunk/src/uk/me/parabola/mkgmap/combiners/FileInfo.java b/trunk/src/uk/me/parabola/mkgmap/combiners/FileInfo.java
--- a/trunk/src/uk/me/parabola/mkgmap/combiners/FileInfo.java (revision 4127)
+++ b/trunk/src/uk/me/parabola/mkgmap/combiners/FileInfo.java (working copy)
@@ -195,7 +195,7 @@
try (ImgChannel chan = new FileImgChannel(filename, "r"); BufferedImgFileReader fr = new BufferedImgFileReader(chan))
{
fr.position(0x15);
- info.setCodePage(fr.getChar());
+ info.setCodePage(fr.get2u());
} catch (IOException e) {
e.printStackTrace();
}
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev