From: Scott Crosby <[email protected]>

---
 src/uk/me/parabola/splitter/SplitProcessor.java |   28 ++++++++++++++++++-----
 1 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/uk/me/parabola/splitter/SplitProcessor.java 
b/src/uk/me/parabola/splitter/SplitProcessor.java
index 97b014e..4f7220e 100644
--- a/src/uk/me/parabola/splitter/SplitProcessor.java
+++ b/src/uk/me/parabola/splitter/SplitProcessor.java
@@ -46,10 +46,13 @@ class SplitProcessor implements MapProcessor {
        
        private final int maxThreads;
 
-       TreeMap<Integer,ArrayList<OSMWriter>> writermap = new 
TreeMap<Integer,ArrayList<OSMWriter>>();
+       int lats[];
+       ArrayList<OSMWriter> writersets[];
+       
        HashMap<OSMWriter,Integer> writerToID = new 
HashMap<OSMWriter,Integer>();
        
        void makeWriterMap() {
+               TreeMap<Integer,ArrayList<OSMWriter>> writermap = new 
TreeMap<Integer,ArrayList<OSMWriter>>();
                for (int i = 0 ; i < writers.length ; i++) {
                        writerToID.put(writers[i],i);
                }
@@ -58,6 +61,10 @@ class SplitProcessor implements MapProcessor {
                        writermap.put(w.getExtendedBounds().getMinLat(),new 
ArrayList<OSMWriter>());
                        writermap.put(w.getExtendedBounds().getMaxLat(),new 
ArrayList<OSMWriter>());
                }
+               // Sentinel keys
+               writermap.put(Integer.MIN_VALUE,new ArrayList<OSMWriter>());
+               writermap.put(Integer.MAX_VALUE,new ArrayList<OSMWriter>());
+
                for (OSMWriter w: writers) {
                        int minlat = w.getExtendedBounds().getMinLat();
                        int maxlat = w.getExtendedBounds().getMaxLat();
@@ -65,7 +72,14 @@ class SplitProcessor implements MapProcessor {
                                writermap.get(i).add(w);
                        }
                }
-
+               lats = new int[writermap.size()];
+               writersets = new ArrayList[writermap.size()];
+               int i = 0;
+               for (Entry<Integer, ArrayList<OSMWriter>> e : 
writermap.entrySet()) {
+                       lats[i] =  e.getKey();
+                       writersets[i] = e.getValue();
+                       i++;
+               }
        }
 
        SplitProcessor(OSMWriter[] writers, int maxThreads) {
@@ -226,10 +240,12 @@ class SplitProcessor implements MapProcessor {
        }
 
        private void writeNode(Node currentNode) throws IOException {
-               Entry<Integer, ArrayList<OSMWriter>> entry = 
writermap.floorEntry(currentNode.getMapLat());
-               if (entry == null)
-                       return;
-               for (OSMWriter w : entry.getValue()) {
+               int index = Arrays.binarySearch(lats, currentNode.getMapLat());
+               if (index < 0)
+                       index = -index-1;
+
+               //System.out.println("Send to "+entry.getValue().size());
+               for (OSMWriter w : writersets[index]) {
                        int n = writerToID.get(w);
                        boolean found = w.nodeBelongsToThisArea(currentNode); 
                        if (found) {
-- 
1.7.2.3

_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to