[mkgmap] 01/04: New upstream version 0.0.0+svn3978
Bas Couwenberg
sebastic at debian.org
Sat Aug 5 12:28:35 UTC 2017
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to branch master
in repository mkgmap.
commit 5fffaff029fbb8ccb6312dc14da0a96277a787ee
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Sat Aug 5 14:12:32 2017 +0200
New upstream version 0.0.0+svn3978
---
resources/installer/installer_template.nsi | 2 +-
resources/mkgmap-version.properties | 4 +-
src/uk/me/parabola/imgfmt/Utils.java | 14 +++++-
.../parabola/imgfmt/app/BufferedImgFileWriter.java | 49 ++++++++++++++++++++
.../imgfmt/app/FileBackedImgFileWriter.java | 53 ++++++++++++++++++++++
src/uk/me/parabola/imgfmt/app/ImgFileWriter.java | 22 +++++++++
src/uk/me/parabola/imgfmt/app/SectionWriter.java | 12 +++++
src/uk/me/parabola/imgfmt/app/lbl/LBLFile.java | 8 ++++
.../me/parabola/imgfmt/app/lbl/LBLFileReader.java | 22 ++-------
src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java | 42 +++++------------
src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java | 8 ++++
src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr17.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr18.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java | 2 +-
.../me/parabola/imgfmt/app/mdr/Mdr1MapIndex.java | 17 +------
src/uk/me/parabola/imgfmt/app/mdr/Mdr25.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr26.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr27.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr28.java | 6 +--
src/uk/me/parabola/imgfmt/app/mdr/Mdr29.java | 17 +++----
src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java | 4 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr5.java | 10 ++--
src/uk/me/parabola/imgfmt/app/mdr/Mdr6.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr8.java | 2 +-
src/uk/me/parabola/imgfmt/app/mdr/Mdr9.java | 2 +-
.../me/parabola/imgfmt/app/mdr/MdrMapSection.java | 9 ++--
src/uk/me/parabola/imgfmt/app/mdr/MdrSection.java | 44 +++---------------
src/uk/me/parabola/imgfmt/app/mdr/PrefixIndex.java | 7 +--
.../me/parabola/imgfmt/app/net/NETFileReader.java | 17 ++-----
.../me/parabola/imgfmt/app/net/NumberPreparer.java | 16 ++++---
src/uk/me/parabola/imgfmt/app/net/RoadDef.java | 32 ++++---------
src/uk/me/parabola/imgfmt/app/typ/TYPFile.java | 49 ++++----------------
src/uk/me/parabola/mkgmap/build/MapBuilder.java | 20 +++++++-
.../mkgmap/filters/MustSplitException.java | 17 ++++---
.../osmstyle/housenumber/HousenumberGenerator.java | 5 +-
src/uk/me/parabola/util/ShapeSplitter.java | 28 +-----------
test/func/lib/ArrayImgWriter.java | 22 +++++++++
39 files changed, 315 insertions(+), 263 deletions(-)
diff --git a/resources/installer/installer_template.nsi b/resources/installer/installer_template.nsi
index 6de4b09..f64a1da 100644
--- a/resources/installer/installer_template.nsi
+++ b/resources/installer/installer_template.nsi
@@ -8,7 +8,7 @@ SetCompressor /SOLID lzma
; Installer pages
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
!insertmacro MUI_PAGE_WELCOME
-!insertmacro MUI_PAGE_LICENSE ${MAPNAME}_license.txt
+!insertmacro MUI_PAGE_LICENSE "${MAPNAME}_license.txt"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
diff --git a/resources/mkgmap-version.properties b/resources/mkgmap-version.properties
index 4263a63..fd2cc69 100644
--- a/resources/mkgmap-version.properties
+++ b/resources/mkgmap-version.properties
@@ -1,2 +1,2 @@
-svn.version: 3973
-build.timestamp: 2017-06-27T10:13:56+0100
+svn.version: 3978
+build.timestamp: 2017-08-04T09:44:15+0100
diff --git a/src/uk/me/parabola/imgfmt/Utils.java b/src/uk/me/parabola/imgfmt/Utils.java
index 36c258a..b933803 100644
--- a/src/uk/me/parabola/imgfmt/Utils.java
+++ b/src/uk/me/parabola/imgfmt/Utils.java
@@ -425,5 +425,17 @@ public class Utils {
return true;
}
-}
+ public static int numberToPointerSize(int n) {
+ // moved from imgfmt/app/mdr/MdrSection.java and app/typ/TYPFile.java
+ if (n <= 0xff)
+ return 1;
+ else if (n <= 0xffff)
+ return 2;
+ else if (n <= 0xffffff)
+ return 3;
+ else
+ return 4;
+ }
+
+}
diff --git a/src/uk/me/parabola/imgfmt/app/BufferedImgFileWriter.java b/src/uk/me/parabola/imgfmt/app/BufferedImgFileWriter.java
index 3c0c642..577d85f 100644
--- a/src/uk/me/parabola/imgfmt/app/BufferedImgFileWriter.java
+++ b/src/uk/me/parabola/imgfmt/app/BufferedImgFileWriter.java
@@ -119,6 +119,28 @@ public class BufferedImgFileWriter implements ImgFileWriter {
}
/**
+ * Write out int in range 0..255 as single byte.
+ * Use instead of put() for unsigned for clarity.
+ * @param val The value to write.
+ */
+ public void put1(int val) {
+ assert val >= 0 && val <= 255 : val;
+ ensureSize(1);
+ buf.put((byte)val);
+ }
+
+ /**
+ * Write out int in range 0..65535 as two bytes in correct byte order.
+ * Use instead of putChar() for unsigned for clarity.
+ * @param val The value to write.
+ */
+ public void put2(int val) {
+ assert val >= 0 && val <= 65535 : val;
+ ensureSize(2);
+ buf.putShort((short)val);
+ }
+
+ /**
* Write out a 3 byte value in the correct byte order etc.
*
* @param val The value to write.
@@ -140,6 +162,33 @@ public class BufferedImgFileWriter implements ImgFileWriter {
}
/**
+ * Write out 1-4 bytes. Done in the correct byte order.
+ *
+ * @param nBytes The number of bytes to write.
+ * @param val The value to write.
+ */
+ public void putN(int nBytes, int val) {
+ ensureSize(nBytes);
+ switch (nBytes) {
+ case 1:
+ buf.put((byte)val);
+ break;
+ case 2:
+ buf.putShort((short)val);
+ break;
+ case 3:
+ buf.put((byte)val);
+ buf.putShort((short)(val >> 8));
+ break;
+ case 4:
+ buf.putInt(val);
+ break;
+ default:
+ assert false : nBytes;
+ }
+ }
+
+ /**
* Write out an arbitrary length sequence of bytes.
*
* @param val The values to write.
diff --git a/src/uk/me/parabola/imgfmt/app/FileBackedImgFileWriter.java b/src/uk/me/parabola/imgfmt/app/FileBackedImgFileWriter.java
index 5a8d127..57d9fe0 100644
--- a/src/uk/me/parabola/imgfmt/app/FileBackedImgFileWriter.java
+++ b/src/uk/me/parabola/imgfmt/app/FileBackedImgFileWriter.java
@@ -130,6 +130,36 @@ public class FileBackedImgFileWriter implements ImgFileWriter{
}
/**
+ * Write out int in range 0..255 as single byte.
+ * Use instead of put() for unsigned for clarity.
+ * @param val The value to write.
+ */
+ public void put1(int val) {
+ assert val >= 0 && val <= 255 : val;
+ try {
+ file.write(val);
+ } catch (IOException e) {
+ throw new MapFailedException("could not write byte to mdr tmp file");
+ }
+ }
+
+ /**
+ * Write out int in range 0..65535 as two bytes in correct byte order.
+ * Use instead of putChar() for unsigned for clarity.
+ * @param val The value to write.
+ */
+ public void put2(int val) {
+ assert val >= 0 && val <= 65535 : val;
+ try {
+ file.write(val);
+ file.write(val >> 8);
+ } catch (IOException e) {
+ throw new MapFailedException("could not write 2 bytes to mdr tmp file");
+ }
+
+ }
+
+ /**
* Write out three bytes. Done in the little endian byte order.
*
* @param val The value to write, only the bottom three bytes will be written.
@@ -145,6 +175,29 @@ public class FileBackedImgFileWriter implements ImgFileWriter{
}
/**
+ * Write out 1-4 bytes. Done in the correct byte order.
+ *
+ * @param nBytes The number of bytes to write.
+ * @param val The value to write.
+ */
+ public void putN(int nBytes, int val) {
+ try {
+ file.write(val);
+ if (nBytes <= 1)
+ return;
+ file.write(val >> 8);
+ if (nBytes <= 2)
+ return;
+ file.write(val >> 16);
+ if (nBytes <= 3)
+ return;
+ file.write(val >> 24);
+ } catch (IOException e) {
+ throw new MapFailedException("could not write put3 to mdr tmp file");
+ }
+ }
+
+ /**
* Write out 4 byte value.
*
* @param val The value to write.
diff --git a/src/uk/me/parabola/imgfmt/app/ImgFileWriter.java b/src/uk/me/parabola/imgfmt/app/ImgFileWriter.java
index 9a094c3..ea1d1f2 100644
--- a/src/uk/me/parabola/imgfmt/app/ImgFileWriter.java
+++ b/src/uk/me/parabola/imgfmt/app/ImgFileWriter.java
@@ -64,6 +64,20 @@ public interface ImgFileWriter extends Closeable {
public void putChar(char c);
/**
+ * Write out int in range 0..255 as single byte.
+ * Use instead of put() for unsigned for clarity.
+ * @param val The value to write.
+ */
+ public void put1(int val);
+
+ /**
+ * Write out int in range 0..65535 as two bytes in correct byte order.
+ * Use instead of putChar() for unsigned for clarity.
+ * @param val The value to write.
+ */
+ public void put2(int val);
+
+ /**
* Write out three bytes. Done in the correct byte order.
*
* @param val The value to write, only the bottom three bytes will be
@@ -72,6 +86,14 @@ public interface ImgFileWriter extends Closeable {
public void put3(int val);
/**
+ * Write out 1-4 bytes. Done in the correct byte order.
+ *
+ * @param nBytes The number of bytes to write.
+ * @param val The value to write.
+ */
+ public void putN(int nBytes, int val);
+
+ /**
* Write out 4 byte value.
* @param val The value to write.
*/
diff --git a/src/uk/me/parabola/imgfmt/app/SectionWriter.java b/src/uk/me/parabola/imgfmt/app/SectionWriter.java
index 126564a..c400d57 100644
--- a/src/uk/me/parabola/imgfmt/app/SectionWriter.java
+++ b/src/uk/me/parabola/imgfmt/app/SectionWriter.java
@@ -66,10 +66,22 @@ public class SectionWriter implements ImgFileWriter {
writer.putChar(c);
}
+ public void put1(int val) {
+ writer.put1(val);
+ };
+
+ public void put2(int val) {
+ writer.put2(val);
+ };
+
public void put3(int val) {
writer.put3(val);
}
+ public void putN(int nBytes, int val) {
+ writer.putN(nBytes, val);
+ }
+
public void putInt(int val) {
writer.putInt(val);
}
diff --git a/src/uk/me/parabola/imgfmt/app/lbl/LBLFile.java b/src/uk/me/parabola/imgfmt/app/lbl/LBLFile.java
index b4bc0c0..95ba202 100644
--- a/src/uk/me/parabola/imgfmt/app/lbl/LBLFile.java
+++ b/src/uk/me/parabola/imgfmt/app/lbl/LBLFile.java
@@ -226,6 +226,14 @@ public class LBLFile extends ImgFile {
return places.numZips();
}
+ public int numHighways() {
+ return places.numHighways();
+ }
+
+ public int numExitFacilities() {
+ return places.numExitFacilities();
+ }
+
public int getCodePage() {
return lblHeader.getCodePage();
}
diff --git a/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java b/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java
index 27bdc37..8c9e17c 100644
--- a/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java
+++ b/src/uk/me/parabola/imgfmt/app/lbl/LBLFileReader.java
@@ -19,6 +19,7 @@ import java.util.List;
import java.util.Map;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.BufferedImgFileReader;
import uk.me.parabola.imgfmt.app.ImgFile;
import uk.me.parabola.imgfmt.app.ImgFileReader;
@@ -404,22 +405,12 @@ public class LBLFileReader extends ImgFile {
}
if (hasCity) {
- int cityIndex;
-
- if (placeHeader.getNumCities() > 0xFF)
- cityIndex = reader.getChar();
- else
- cityIndex = reader.get() & 0xff;
-
+ int cityIndex = reader.getUint(Utils.numberToPointerSize(placeHeader.getNumCities()));
poi.setCity(cities.get(cityIndex-1));
}
if (hasZip) {
- int zipIndex;
- if (placeHeader.getNumZips() > 0xff)
- zipIndex = reader.getChar();
- else
- zipIndex = reader.get() & 0xff;
+ int zipIndex = reader.getUint(Utils.numberToPointerSize(placeHeader.getNumZips()));
poi.setZip(zips.get(zipIndex-1));
}
@@ -442,12 +433,9 @@ public class LBLFileReader extends ImgFile {
boolean indexed = (lblinfo & 0x800000) != 0;
boolean overnightParking = (lblinfo & 0x400000) != 0;
- int highwayIndex = (placeHeader.getNumHighways() > 255)
- ? reader.getChar() : reader.get();
+ int highwayIndex = reader.getUint(Utils.numberToPointerSize(placeHeader.getNumHighways()));
if (indexed) {
- int eidx = (placeHeader.getNumExits() > 255) ?
- reader.getChar() :
- reader.get();
+ int eidx = reader.getUint(Utils.numberToPointerSize(placeHeader.getNumExits()));
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java b/src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java
index e87ca70..f7f5790 100644
--- a/src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java
+++ b/src/uk/me/parabola/imgfmt/app/lbl/POIRecord.java
@@ -18,6 +18,7 @@ package uk.me.parabola.imgfmt.app.lbl;
import java.util.List;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.Exit;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
import uk.me.parabola.imgfmt.app.Label;
@@ -130,18 +131,12 @@ public class POIRecord {
if (city != null)
{
char cityIndex = (char) city.getIndex();
- if(numCities > 255)
- writer.putChar(cityIndex);
- else
- writer.put((byte)cityIndex);
+ writer.putN(Utils.numberToPointerSize((int)numCities), cityIndex);
}
if (zip != null) {
char zipIndex = (char) zip.getIndex();
- if(numZips > 255)
- writer.putChar(zipIndex);
- else
- writer.put((byte) zipIndex);
+ writer.putN(Utils.numberToPointerSize((int)numZips), zipIndex);
}
if (complexPhoneNumber != null)
@@ -171,17 +166,11 @@ public class POIRecord {
writer.put3(val);
char highwayIndex = (char)exit.getHighway().getIndex();
- if(numHighways > 255)
- writer.putChar(highwayIndex);
- else
- writer.put((byte)highwayIndex);
-
+ writer.putN(Utils.numberToPointerSize((int)numHighways), highwayIndex);
+
if(ef != null) {
char exitFacilityIndex = (char)ef.getIndex();
- if(numExitFacilities > 255)
- writer.putChar(exitFacilityIndex);
- else
- writer.put((byte)exitFacilityIndex);
+ writer.putN(Utils.numberToPointerSize((int)numExitFacilities), exitFacilityIndex);
}
}
}
@@ -242,9 +231,9 @@ public class POIRecord {
int size = 3;
if (exit != null) {
size += 3;
- size += (numHighways > 255)? 2 : 1;
+ size += Utils.numberToPointerSize((int)numHighways);
if(!exit.getFacilities().isEmpty())
- size += (numExitFacilities > 255)? 2 : 1;
+ size += Utils.numberToPointerSize((int)numExitFacilities);
}
if (POIGlobalFlags != getPOIFlags())
size += 1;
@@ -262,20 +251,13 @@ public class POIRecord {
{
/*
depending on how many cities are in the LBL block we have
- to write one or two bytes
+ to write one to three bytes
*/
-
- if(numCities > 255)
- size += 2;
- else
- size += 1;
+ size += Utils.numberToPointerSize((int)numCities);
}
if (zip != null) {
- // depending on how many zips are in the LBL block we have to write one or two bytes
- if(numZips > 255)
- size += 2;
- else
- size += 1;
+ // depending on how many zips are in the LBL block we have to write one to three bytes
+ size += Utils.numberToPointerSize((int)numZips);
}
return size;
}
diff --git a/src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java b/src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java
index 4c0fac5..0bbbf0e 100644
--- a/src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java
+++ b/src/uk/me/parabola/imgfmt/app/lbl/PlacesFile.java
@@ -419,6 +419,14 @@ public class PlacesFile {
return postalCodes.size();
}
+ public int numHighways() {
+ return highways.size();
+ }
+
+ public int numExitFacilities() {
+ return exitFacilities.size();
+ }
+
public void setSort(Sort sort) {
this.sort = sort;
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java
index 9f33ff8..9f8d730 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr15.java
@@ -132,7 +132,7 @@ public class Mdr15 extends MdrSection {
* for this.
*/
public int getSizeForRecord() {
- return numberToPointerSize(nextOffset);
+ return Utils.numberToPointerSize(nextOffset);
}
/**
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr17.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr17.java
index 767403c..283d122 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr17.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr17.java
@@ -64,7 +64,7 @@ public class Mdr17 extends MdrSection {
len <<= 1;
count++;
}
- putN(writer, count, len);
+ writer.putN(count, len);
// Calculate the header. This code is unlikely to survive the finding of another example!
// Have no idea what the real thinking behind this is.
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr18.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr18.java
index 59b3477..7e0a17b 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr18.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr18.java
@@ -35,7 +35,7 @@ public class Mdr18 extends MdrSection implements HasHeaderFlags {
int poiSize = getSizes().getSize(19);
for (Mdr18Record pt : poiTypes) {
writer.putChar((char) (pt.getType() | 0x4000));
- putN(writer, poiSize, pt.getRecord());
+ writer.putN(poiSize, pt.getRecord());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java
index b134c7b..89208f6 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr19.java
@@ -69,7 +69,7 @@ public class Mdr19 extends MdrSection implements HasHeaderFlags {
index |= flag;
lastName = name;
}
- putN(writer, n, index);
+ writer.putN(n, index);
int type = MdrUtils.fullTypeToNaturalType(p.getType());
if (type != lastType) {
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr1MapIndex.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr1MapIndex.java
index 12cf0e4..13f6bbb 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr1MapIndex.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr1MapIndex.java
@@ -44,22 +44,7 @@ public class Mdr1MapIndex {
}
public void addPointer(int recordNumber) {
- switch (pointerSize) {
- case 4:
- subWriter.putInt(recordNumber);
- break;
- case 3:
- subWriter.put3(recordNumber);
- break;
- case 2:
- subWriter.putChar((char) recordNumber);
- break;
- case 1:
- subWriter.put((byte) recordNumber);
- break;
- default:
- assert false;
- }
+ subWriter.putN(pointerSize, recordNumber);
}
private int sectionToSubsection(int n) {
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr25.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr25.java
index cf4b94a..ec3bb23 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr25.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr25.java
@@ -81,7 +81,7 @@ public class Mdr25 extends MdrSection {
public void writeSectData(ImgFileWriter writer) {
int size = getItemSize();
for (Mdr5Record city : cities) {
- putN(writer, size, city.getGlobalCityIndex());
+ writer.putN(size, city.getGlobalCityIndex());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr26.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr26.java
index 8882e84..8780773 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr26.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr26.java
@@ -74,7 +74,7 @@ public class Mdr26 extends MdrSection {
public void writeSectData(ImgFileWriter writer) {
int size = getSizes().getSize(28);
for (Mdr28Record record : index) {
- putN(writer, size, record.getIndex());
+ writer.putN(size, record.getIndex());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr27.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr27.java
index 095c3a5..0606025 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr27.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr27.java
@@ -76,7 +76,7 @@ public class Mdr27 extends MdrSection {
public void writeSectData(ImgFileWriter writer) {
int size = getItemSize();
for (Mdr5Record city : cities) {
- putN(writer, size, city.getGlobalCityIndex());
+ writer.putN(size, city.getGlobalCityIndex());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr28.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr28.java
index 0797608..8aa5e37 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr28.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr28.java
@@ -73,10 +73,10 @@ public class Mdr28 extends MdrSection implements HasHeaderFlags {
int size27 = sizes.getSize(27);
for (Mdr28Record mdr28 : index) {
- putN(writer, size23, mdr28.getMdr23());
+ writer.putN(size23, mdr28.getMdr23());
putStringOffset(writer, mdr28.getStrOffset());
- putN(writer, size21, mdr28.getMdr21());
- putN(writer, size27, mdr28.getMdr27());
+ writer.putN(size21, mdr28.getMdr21());
+ writer.putN(size27, mdr28.getMdr27());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr29.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr29.java
index 7287918..62caed7 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr29.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr29.java
@@ -15,6 +15,7 @@ package uk.me.parabola.imgfmt.app.mdr;
import java.util.ArrayList;
import java.util.List;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
import uk.me.parabola.imgfmt.app.srt.Sort;
import uk.me.parabola.imgfmt.app.srt.SortKey;
@@ -82,17 +83,17 @@ public class Mdr29 extends MdrSection implements HasHeaderFlags {
int size22 = sizes.getSize(22);
int size25 = sizes.getSize(5); // NB appears to be size of 5 (cities), not 25 (cities with country).
int size26 = has26? sizes.getSize(26): 0;
- int size17 = numberToPointerSize(max17);
+ int size17 = Utils.numberToPointerSize(max17);
for (Mdr29Record record : index) {
- putN(writer, size24, record.getMdr24());
+ writer.putN(size24, record.getMdr24());
if (hasString)
putStringOffset(writer, record.getStrOffset());
- putN(writer, size22, record.getMdr22());
- putN(writer, size25, record.getMdr25());
+ writer.putN(size22, record.getMdr22());
+ writer.putN(size25, record.getMdr25());
if (has26)
- putN(writer, size26, record.getMdr26());
+ writer.putN(size26, record.getMdr26());
if (has17)
- putN(writer, size17, record.getMdr17());
+ writer.putN(size17, record.getMdr17());
}
}
@@ -111,7 +112,7 @@ public class Mdr29 extends MdrSection implements HasHeaderFlags {
;
if (isForDevice()) {
if (!getConfig().getSort().isMulti())
- size += numberToPointerSize(max17);
+ size += Utils.numberToPointerSize(max17);
} else {
size += sizes.getStrOffSize();
size += sizes.getSize(26);
@@ -138,7 +139,7 @@ public class Mdr29 extends MdrSection implements HasHeaderFlags {
if (isForDevice()) {
int magic = 0x6; // 22 and 25
if (!getConfig().getSort().isMulti())
- magic |= numberToPointerSize(max17) << 4;
+ magic |= Utils.numberToPointerSize(max17) << 4;
return magic; // +17, -26, -strings
}
else
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java
index 30a428b..2e00eb4 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr2x.java
@@ -70,7 +70,7 @@ public abstract class Mdr2x extends MdrMapSection implements HasHeaderFlags {
int trailingFlags = ((rr & 1) == 0) ? 1 : 0;
// trailingFlags |= s.getB() << 1;
// trailingFlags |= s.getS() << (1 + partialBShift);
- putN(writer, partialInfoSize, trailingFlags);
+ writer.putN(partialInfoSize, trailingFlags);
}
} else {
int rr = street.checkFullRepeat(prev, collator);
@@ -78,7 +78,7 @@ public abstract class Mdr2x extends MdrMapSection implements HasHeaderFlags {
repeat = 0;
int index = street.getIndex();
- putN(writer, size, (index << 1) | repeat);
+ writer.putN(size, (index << 1) | repeat);
}
prev = street;
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr5.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr5.java
index bc9b045..fd384e9 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr5.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr5.java
@@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
import uk.me.parabola.imgfmt.app.srt.MultiSortKey;
import uk.me.parabola.imgfmt.app.srt.Sort;
@@ -51,7 +52,7 @@ public class Mdr5 extends MdrMapSection {
* Called after all cities to sort and number them.
*/
public void preWriteImpl() {
- localCitySize = numberToPointerSize(maxCityIndex + 1);
+ localCitySize = Utils.numberToPointerSize(maxCityIndex + 1);
List<SortKey<Mdr5Record>> sortKeys = new ArrayList<>(allCities.size());
Sort sort = getConfig().getSort();
@@ -216,7 +217,7 @@ public class Mdr5 extends MdrMapSection {
writer.putChar((char) region);
if (hasString)
putStringOffset(writer, city.getStringOffset());
- putN(writer, size20, city.getMdr20());
+ writer.putN(size20, city.getMdr20());
}
}
@@ -225,10 +226,7 @@ public class Mdr5 extends MdrMapSection {
* and not the global city index used in mdr11.
*/
private void putLocalCityIndex(ImgFileWriter writer, int cityIndex) {
- if (localCitySize == 2) // 3 probably not possible in actual maps.
- writer.putChar((char) cityIndex);
- else
- writer.put((byte) cityIndex);
+ writer.putN(localCitySize, cityIndex);
}
/**
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr6.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr6.java
index 249a0d7..f1ffef2 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr6.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr6.java
@@ -56,7 +56,7 @@ public class Mdr6 extends MdrMapSection {
addIndexPointer(z.getMapIndex(), record++);
putMapIndex(writer, z.getMapIndex());
- putN(writer, zipSize, z.getZipIndex());
+ writer.putN(zipSize, z.getZipIndex());
if (hasString)
putStringOffset(writer, z.getStringOffset());
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java
index 637a8e9..63b7992 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr7.java
@@ -367,7 +367,7 @@ public class Mdr7 extends MdrMapSection {
int trailingFlags = ((rr & 1) == 0) ? 1 : 0;
// trailingFlags |= s.getB() << 1;
// trailingFlags |= s.getS() << (1 + partialBShift);
- putN(writer, partialInfoSize, trailingFlags);
+ writer.putN(partialInfoSize, trailingFlags);
}
last = s;
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr8.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr8.java
index c250b72..3c6e73a 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr8.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr8.java
@@ -44,7 +44,7 @@ public class Mdr8 extends MdrSection implements HasHeaderFlags {
for (int i = 0; i< STRING_WIDTH; i++) {
writer.put((byte) s.getPrefix()[i]);
}
- putN(writer, size, s.getRecordNumber());
+ writer.putN(size, s.getRecordNumber());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/Mdr9.java b/src/uk/me/parabola/imgfmt/app/mdr/Mdr9.java
index 58ebc33..acc115c 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/Mdr9.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/Mdr9.java
@@ -36,7 +36,7 @@ public class Mdr9 extends MdrSection implements HasHeaderFlags {
for (Map.Entry<Integer, Integer> ent : index.entrySet()) {
int group = ent.getKey();
writer.put((byte) group);
- putN(writer, poiSize, ent.getValue());
+ writer.putN(poiSize, ent.getValue());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/MdrMapSection.java b/src/uk/me/parabola/imgfmt/app/mdr/MdrMapSection.java
index 14ab889..88bf9e6 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/MdrMapSection.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/MdrMapSection.java
@@ -12,6 +12,7 @@
*/
package uk.me.parabola.imgfmt.app.mdr;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
/**
@@ -37,7 +38,7 @@ public abstract class MdrMapSection extends MdrSection implements HasHeaderFlags
// There are no flags or minimums required here, unlike in setPointerSize()
// which does a similar thing.
int n = getNumberOfItems();
- index.setPointerSize(sectionNumber, numberToPointerSize(n));
+ index.setPointerSize(sectionNumber, Utils.numberToPointerSize(n));
}
/**
@@ -52,18 +53,18 @@ public abstract class MdrMapSection extends MdrSection implements HasHeaderFlags
protected void putCityIndex(ImgFileWriter writer, int cityIndex, boolean isNew) {
int flag = (isNew && cityIndex > 0)? getSizes().getCityFlag(): 0;
- putN(writer, getSizes().getCitySizeFlagged(), cityIndex | flag);
+ writer.putN(getSizes().getCitySizeFlagged(), cityIndex | flag);
}
protected void putRegionIndex(ImgFileWriter writer, int region) {
// This is only called when putCityIndex might also be called and so has to be
// the same size (probably ;)
- putN(writer, getSizes().getCitySizeFlagged(), region);
+ writer.putN(getSizes().getCitySizeFlagged(), region);
}
protected void putPoiIndex(ImgFileWriter writer, int poiIndex, boolean isNew) {
int flag = isNew? getSizes().getPoiFlag(): 0;
- putN(writer, getSizes().getPoiSizeFlagged(), poiIndex | flag);
+ writer.putN(getSizes().getPoiSizeFlagged(), poiIndex | flag);
}
protected boolean hasFlag(int val) {
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/MdrSection.java b/src/uk/me/parabola/imgfmt/app/mdr/MdrSection.java
index a851293..a33beeb 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/MdrSection.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/MdrSection.java
@@ -12,6 +12,7 @@
*/
package uk.me.parabola.imgfmt.app.mdr;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
/**
@@ -48,42 +49,11 @@ public abstract class MdrSection extends ConfigBase {
}
protected void putMapIndex(ImgFileWriter writer, int mapIndex) {
- putN(writer, sizes.getMapSize(), mapIndex);
+ writer.putN(sizes.getMapSize(), mapIndex);
}
protected void putStringOffset(ImgFileWriter writer, int strOff) {
- putN(writer, sizes.getStrOffSize(), strOff);
- }
-
- protected void putN(ImgFileWriter writer, int n, int value) {
- switch (n) {
- case 1:
- writer.put((byte) value);
- break;
- case 2:
- writer.putChar((char) value);
- break;
- case 3:
- writer.put3(value);
- break;
- case 4:
- writer.putInt(value);
- break;
- default: // Don't write anything.
- assert false;
- break;
- }
- }
-
- protected static int numberToPointerSize(int n) {
- if (n > 0xffffff)
- return 4;
- else if (n > 0xffff)
- return 3;
- else if (n > 0xff)
- return 2;
- else
- return 1;
+ writer.putN(sizes.getStrOffSize(), strOff);
}
/**
@@ -113,7 +83,7 @@ public abstract class MdrSection extends ConfigBase {
* to store the largest record number in this section.
*/
public int getSizeForRecord() {
- return numberToPointerSize(getNumberOfItems());
+ return Utils.numberToPointerSize(getNumberOfItems());
}
/**
@@ -178,7 +148,7 @@ public abstract class MdrSection extends ConfigBase {
* one bit flag.
*/
public int getCitySizeFlagged() {
- return Math.max(2, numberToPointerSize(sections[5].getNumberOfItems() << 1));
+ return Math.max(2, Utils.numberToPointerSize(sections[5].getNumberOfItems() << 1));
}
public int getCityFlag() {
@@ -190,7 +160,7 @@ public abstract class MdrSection extends ConfigBase {
}
public int getStreetSizeFlagged() {
- return numberToPointerSize(sections[7].getNumberOfItems() << 1);
+ return Utils.numberToPointerSize(sections[7].getNumberOfItems() << 1);
}
public int getPoiSize() {
@@ -207,7 +177,7 @@ public abstract class MdrSection extends ConfigBase {
* and a flag bit.
*/
public int getPoiSizeFlagged() {
- return numberToPointerSize(sections[11].getNumberOfItems() << 1);
+ return Utils.numberToPointerSize(sections[11].getNumberOfItems() << 1);
}
public int getPoiFlag() {
diff --git a/src/uk/me/parabola/imgfmt/app/mdr/PrefixIndex.java b/src/uk/me/parabola/imgfmt/app/mdr/PrefixIndex.java
index 4e416d8..4d16149 100644
--- a/src/uk/me/parabola/imgfmt/app/mdr/PrefixIndex.java
+++ b/src/uk/me/parabola/imgfmt/app/mdr/PrefixIndex.java
@@ -16,6 +16,7 @@ import java.text.Collator;
import java.util.ArrayList;
import java.util.List;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
import uk.me.parabola.imgfmt.app.srt.Sort;
import uk.me.parabola.imgfmt.app.srt.Sort.SrtCollator;
@@ -114,17 +115,17 @@ public class PrefixIndex extends MdrSection {
* Write the section or subsection.
*/
public void writeSectData(ImgFileWriter writer) {
- int size = numberToPointerSize(maxIndex);
+ int size = Utils.numberToPointerSize(maxIndex);
for (Mdr8Record s : index) {
for (int i = 0; i< prefixLength; i++) {
writer.put((byte) s.getPrefix()[i]);
}
- putN(writer, size, s.getRecordNumber());
+ writer.putN(size, s.getRecordNumber());
}
}
public int getItemSize() {
- return prefixLength + numberToPointerSize(maxIndex);
+ return prefixLength + Utils.numberToPointerSize(maxIndex);
}
protected int numberOfItems() {
diff --git a/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java b/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
index 6863f13..e3fbbb5 100644
--- a/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
+++ b/src/uk/me/parabola/imgfmt/app/net/NETFileReader.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.BufferedImgFileReader;
import uk.me.parabola.imgfmt.app.ImgFile;
import uk.me.parabola.imgfmt.app.ImgFileReader;
@@ -152,7 +153,7 @@ public class NETFileReader extends ImgFile {
indexes.clear();
if (flag == 2) {
// fetch city/zip index
- int ind = (size == 2)? reader.getChar(): (reader.get() & 0xff);
+ int ind = reader.getUint(size);
if (ind != 0)
indexes.add(ind-1);
} else if (flag == 3) {
@@ -209,15 +210,7 @@ public class NETFileReader extends ImgFile {
assert false : "ERRROR overflow";
return 0;
}
- int cnum;
- if (size == 1)
- cnum = reader.get() & 0xff;
- else if (size == 2)
- cnum = reader.getChar();
- else {
- assert false : "unexpected size value" + size;
- return 0;
- }
+ int cnum = reader.getUint(size);
return cnum;
}
@@ -300,12 +293,12 @@ public class NETFileReader extends ImgFile {
public void setCities(List<City> cities) {
this.cities = cities;
- this.citySize = cities.size() > 255? 2: 1;
+ this.citySize = Utils.numberToPointerSize(cities.size());
}
public void setZips(List<Zip> zips) {
this.zips = zips;
- this.zipSize = zips.size() > 255? 2: 1;
+ this.zipSize = Utils.numberToPointerSize(zips.size());
}
public void setLabels(LBLFileReader labels) {
diff --git a/src/uk/me/parabola/imgfmt/app/net/NumberPreparer.java b/src/uk/me/parabola/imgfmt/app/net/NumberPreparer.java
index 4b48d47..ecc9f8d 100644
--- a/src/uk/me/parabola/imgfmt/app/net/NumberPreparer.java
+++ b/src/uk/me/parabola/imgfmt/app/net/NumberPreparer.java
@@ -13,10 +13,10 @@
package uk.me.parabola.imgfmt.app.net;
import java.io.ByteArrayOutputStream;
-import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.BitWriter;
import uk.me.parabola.imgfmt.app.lbl.City;
import uk.me.parabola.imgfmt.app.lbl.Zip;
@@ -998,12 +998,14 @@ class CityZipWriter {
void writeIndex(int val){
if (val <= 0)
return;
- if (numItems > 255){
- buf.write((byte) val & 0xff);
- buf.write((byte) (val >> 8));
- }
- else
- buf.write((byte) val);
+ int ptrSize = Utils.numberToPointerSize(numItems);
+ buf.write(val);
+ if (ptrSize <= 1)
+ return;
+ buf.write(val >> 8);
+ if (ptrSize <= 2)
+ return;
+ buf.write(val >> 16);
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/net/RoadDef.java b/src/uk/me/parabola/imgfmt/app/net/RoadDef.java
index cc38c9e..7976a45 100644
--- a/src/uk/me/parabola/imgfmt/app/net/RoadDef.java
+++ b/src/uk/me/parabola/imgfmt/app/net/RoadDef.java
@@ -27,6 +27,7 @@ import java.util.SortedMap;
import java.util.TreeMap;
import uk.me.parabola.imgfmt.MapFailedException;
+import uk.me.parabola.imgfmt.Utils;
import uk.me.parabola.imgfmt.app.BitWriter;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
import uk.me.parabola.imgfmt.app.Label;
@@ -243,7 +244,7 @@ public class RoadDef {
len = (numbers == null) ? 0: numbers.zipWriter.getBuffer().size();
if (len > 0){
zipBuf = numbers.zipWriter.getBuffer();
- flag = (len > 255) ? 1 : 0;
+ flag = Utils.numberToPointerSize(len) - 1;
} else
flag = (zip == null) ? 3 : 2;
code |= flag << 2;
@@ -251,14 +252,14 @@ public class RoadDef {
len = (numbers == null) ? 0: numbers.cityWriter.getBuffer().size();
if (len > 0){
cityBuf = numbers.cityWriter.getBuffer();
- flag = (len > 255) ? 1 : 0;
+ flag = Utils.numberToPointerSize(len) - 1;
} else
flag = (city == null) ? 3 : 2;
code |= flag << 4;
len = (numbers == null) ? 0 : numbers.fetchBitStream().getLength();
if (len > 0){
- flag = (len > 255) ? 1 : 0;
+ flag = Utils.numberToPointerSize(len) - 1;
} else
flag = 3;
code |= flag << 6;
@@ -268,42 +269,27 @@ public class RoadDef {
if (zipBuf != null){
len = zipBuf.size();
- if (len > 255)
- writer.putChar((char) len);
- else
- writer.put((byte) len);
+ writer.putN(Utils.numberToPointerSize(len), len);
writer.put(zipBuf.toByteArray());
} else {
if(zip != null) {
char zipIndex = (char)zip.getIndex();
- if(numZips > 255)
- writer.putChar(zipIndex);
- else
- writer.put((byte)zipIndex);
+ writer.putN(Utils.numberToPointerSize(numZips), zipIndex);
}
}
if (cityBuf != null){
len = cityBuf.size();
- if (len > 255)
- writer.putChar((char) len);
- else
- writer.put((byte) len);
+ writer.putN(Utils.numberToPointerSize(len), len);
writer.put(cityBuf.toByteArray());
} else {
if(city != null) {
char cityIndex = (char)city.getIndex();
- if(numCities > 255)
- writer.putChar(cityIndex);
- else
- writer.put((byte)cityIndex);
+ writer.putN(Utils.numberToPointerSize(numCities), cityIndex);
}
}
if (numbers != null) {
BitWriter bw = numbers.fetchBitStream();
- if (bw.getLength() > 255)
- writer.putChar((char) bw.getLength());
- else
- writer.put((byte) bw.getLength());
+ writer.putN(Utils.numberToPointerSize(bw.getLength()), bw.getLength());
writer.put(bw.getBytes(), 0, bw.getLength());
}
}
diff --git a/src/uk/me/parabola/imgfmt/app/typ/TYPFile.java b/src/uk/me/parabola/imgfmt/app/typ/TYPFile.java
index e19208c..8b0b4fb 100644
--- a/src/uk/me/parabola/imgfmt/app/typ/TYPFile.java
+++ b/src/uk/me/parabola/imgfmt/app/typ/TYPFile.java
@@ -135,24 +135,24 @@ public class TYPFile extends ImgFile {
private void writeStrIndex(ImgFileWriter in) {
SectionWriter writer = header.getStringIndex().makeSectionWriter(in);
- int psize = ptrSize(header.getLabels().getSize());
+ int psize = Utils.numberToPointerSize(header.getLabels().getSize());
header.getStringIndex().setItemSize((char) (3 + psize));
for (Map.Entry<Integer, Integer> ent : strToType.entrySet()) {
- putN(writer, psize, ent.getKey());
- putN(writer, 3, ent.getValue());
+ writer.putN(psize, ent.getKey());
+ writer.put3(ent.getValue());
}
Utils.closeFile(writer);
}
private void writerTypeIndex(ImgFileWriter in) {
SectionWriter writer = header.getTypeIndex().makeSectionWriter(in);
- int psize = ptrSize(header.getLabels().getSize());
+ int psize = Utils.numberToPointerSize(header.getLabels().getSize());
header.getTypeIndex().setItemSize((char) (3 + psize));
for (Map.Entry<Integer, Integer> ent : typeToStr.entrySet()) {
- putN(writer, 3, ent.getKey());
- putN(writer, psize, ent.getValue());
+ writer.put3(ent.getKey());
+ writer.putN(psize, ent.getValue());
}
Utils.closeFile(writer);
}
@@ -170,7 +170,7 @@ public class TYPFile extends ImgFile {
int size = dataSection.getSize();
int typeSize = indexSection.getItemSize();
- int psize = ptrSize(size);
+ int psize = Utils.numberToPointerSize(size);
indexSection.setItemSize((char) (typeSize + psize));
@@ -178,8 +178,8 @@ public class TYPFile extends ImgFile {
for (TypElement elem : elementData) {
int offset = elem.getOffset();
int type = elem.getTypeForFile();
- putN(subWriter, typeSize, type);
- putN(subWriter, psize, offset);
+ subWriter.putN(typeSize, type);
+ subWriter.putN(psize, offset);
}
Utils.closeFile(subWriter);
@@ -195,37 +195,6 @@ public class TYPFile extends ImgFile {
}
}
- private int ptrSize(int size) {
- int psize = 1;
- if (size > 0xffffff)
- psize = 4;
- else if (size > 0xffff)
- psize = 3;
- else if (size > 0xff)
- psize = 2;
- return psize;
- }
-
- protected void putN(ImgFileWriter writer, int n, int value) {
- switch (n) {
- case 1:
- writer.put((byte) value);
- break;
- case 2:
- writer.putChar((char) value);
- break;
- case 3:
- writer.put3(value);
- break;
- case 4:
- writer.putInt(value);
- break;
- default: // Don't write anything.
- assert false;
- break;
- }
- }
-
public void setData(TypData data) {
this.data = data;
TypParam param = data.getParam();
diff --git a/src/uk/me/parabola/mkgmap/build/MapBuilder.java b/src/uk/me/parabola/mkgmap/build/MapBuilder.java
index 0afecb6..c030855 100644
--- a/src/uk/me/parabola/mkgmap/build/MapBuilder.java
+++ b/src/uk/me/parabola/mkgmap/build/MapBuilder.java
@@ -267,8 +267,26 @@ public class MapBuilder implements Configurable {
}
netFile.writePost(rgnFile.getWriter());
}
+ warnAbout3ByteImgRefs();
}
-
+
+ private void warnAbout3ByteImgRefs() {
+ String infoMsg = "- more than 65535 might cause indexing problems and excess size. Suggest splitter with lower --max-nodes";
+ int itemCount;
+ itemCount = lblFile.numCities();
+ if (itemCount > 0xffff)
+ log.error("Map contains", itemCount, "Cities", infoMsg);
+ itemCount = lblFile.numZips();
+ if (itemCount > 0xffff)
+ log.error("Map contains", itemCount, "Zips", infoMsg);
+ itemCount = lblFile.numHighways();
+ if (itemCount > 0xffff)
+ log.error("Map contains", itemCount, "Highways", infoMsg);
+ itemCount = lblFile.numExitFacilities();
+ if (itemCount > 0xffff)
+ log.error("Map contains", itemCount, "Exit facilities", infoMsg);
+ } // warnAbout3ByteImgRefs
+
private Country getDefaultCountry() {
if (defaultCountry == null && lblFile != null) {
defaultCountry = lblFile.createCountry(countryName, countryAbbr);
diff --git a/src/uk/me/parabola/mkgmap/filters/MustSplitException.java b/src/uk/me/parabola/mkgmap/filters/MustSplitException.java
index 3efbf19..b57017c 100644
--- a/src/uk/me/parabola/mkgmap/filters/MustSplitException.java
+++ b/src/uk/me/parabola/mkgmap/filters/MustSplitException.java
@@ -1,15 +1,14 @@
/*
* Copyright (C) 2017
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 or
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
*
*/
package uk.me.parabola.mkgmap.filters;
diff --git a/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java b/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
index ff99406..b045351 100644
--- a/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
+++ b/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
@@ -1534,10 +1534,7 @@ public class HousenumberGenerator {
if (dDist != 0d) {
return (int)Math.signum(dDist);
}
- if (d != 0)
- return d;
- d = Long.compare(o1.getElement().getId(), o2.getElement().getId());
- return d;
+ return Long.compare(o1.getElement().getId(), o2.getElement().getId());
}
}
/**
diff --git a/src/uk/me/parabola/util/ShapeSplitter.java b/src/uk/me/parabola/util/ShapeSplitter.java
index 6fc14f5..6fc9c31 100644
--- a/src/uk/me/parabola/util/ShapeSplitter.java
+++ b/src/uk/me/parabola/util/ShapeSplitter.java
@@ -279,31 +279,7 @@ public class ShapeSplitter {
/* Dec16/Jan17. Ticker Berkin. New implementation for splitting shapes.
-Eventually maybe can be used instead of some of the above and in following code:
-
-done mkgmap/build/MapArea.java
- mkgmap/filters/PolygonSplitterBase.java
- mkgmap/filters/ShapeMergeFilter.java
- mkgmap/general/AreaClipper.java
- mkgmap/general/PolygonClipper.java
- mkgmap/reader/osm/MultiPolygonRelation.java
-Maybe not this lot:
- mkgmap/reader/osm/boundary/BoundaryConverter.java
- mkgmap/reader/osm/boundary/BoundaryCoverageUtil.java
- mkgmap/reader/osm/boundary/BoundaryDiff.java
- mkgmap/reader/osm/boundary/BoundaryElement.java
- mkgmap/reader/osm/boundary/BoundaryFile2Gpx.java
- mkgmap/reader/osm/boundary/BoundaryQuadTree.java
- mkgmap/reader/osm/boundary/BoundaryRelation.java
- mkgmap/reader/osm/boundary/BoundarySaver.java
- mkgmap/reader/osm/boundary/BoundaryUtil.java
-? not sure about these
- mkgmap/reader/osm/SeaGenerator.java
- mkgmap/sea/optional/PrecompSeaGenerator.java
- mkgmap/sea/optional/PrecompSeaMerger.java
- util/ElementQuadTreeNode.java
- util/Java2DConverter.java
- util/QuadTreeNode.java
+Eventually maybe can be used instead of some of the above and elsewhere
*/
/**
@@ -327,7 +303,7 @@ Maybe not this lot:
MergeCloseHelper thisLine = lineInfo.get(inx);
if (thisLine.highPoint > endEnclosed) // only do enclosed items
break; // simple - fully enclosed
- if (thisLine.highPoint == endEnclosed && thisLine.highPoint == endEnclosed) // consider carefully
+ if (thisLine.lowPoint == endEnclosed && thisLine.highPoint == endEnclosed) // consider carefully
if (calledFromHole == (thisLine.areaOrHole == -1))
break; // stop if same type
inx = doLines(inx+1, thisLine.highPoint, calledFromHole ? thisLine : null, lineInfo, origList);
diff --git a/test/func/lib/ArrayImgWriter.java b/test/func/lib/ArrayImgWriter.java
index 437da23..bf70e91 100644
--- a/test/func/lib/ArrayImgWriter.java
+++ b/test/func/lib/ArrayImgWriter.java
@@ -46,12 +46,34 @@ public class ArrayImgWriter implements ImgFileWriter {
out.write((c >> 8) & 0xff);
}
+ public void put1(int val) {
+ out.write(val & 0xff);
+ }
+
+ public void put2(int val) {
+ out.write(val & 0xff);
+ out.write((val >> 8) & 0xff);
+ }
+
public void put3(int val) {
out.write(val & 0xff);
out.write((val >> 8) & 0xff);
out.write((val >> 16) & 0xff);
}
+ public void putN(int nBytes, int val) {
+ out.write(val & 0xff);
+ if (nBytes <= 1)
+ return;
+ out.write((val >> 8) & 0xff);
+ if (nBytes <= 2)
+ return;
+ out.write((val >> 16) & 0xff);
+ if (nBytes <= 3)
+ return;
+ out.write((val >> 24) & 0xff);
+ }
+
public void putInt(int val) {
out.write(val & 0xff);
out.write((val >> 8) & 0xff);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mkgmap.git
More information about the Pkg-grass-devel
mailing list