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 <sebas...@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 _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel