Fix:maptool:Avoid ref counting multiple times in case of restart
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Sun, 10 Jul 2011 10:02:49 +0000 (10:02 +0000)
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Sun, 10 Jul 2011 10:02:49 +0000 (10:02 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@4615 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/maptool/maptool.c
navit/navit/maptool/maptool.h
navit/navit/maptool/osm.c

index da9684a..a8ff840 100644 (file)
@@ -412,7 +412,7 @@ osm_collect_data(struct maptool_params *p, char *suffix)
 int debug_ref=0;
 
 static void
-osm_count_references(struct maptool_params *p, char *suffix)
+osm_count_references(struct maptool_params *p, char *suffix, int clear)
 {
        int i,first=1;
        fprintf(stderr,"%d slices\n",slices);
@@ -421,6 +421,8 @@ osm_count_references(struct maptool_params *p, char *suffix)
                if (!first) {
                        FILE *ways=tempfile(suffix,"ways",0);
                        load_buffer("coords.tmp",&node_buffer, i*slice_size, slice_size);
+                       if (clear) 
+                               clear_node_item_buffer();
                        ref_ways(ways);
                        save_buffer("coords.tmp",&node_buffer, i*slice_size);
                        fclose(ways);
@@ -768,7 +770,7 @@ int main(int argc, char **argv)
                if (p.start <= phase && p.end >= phase) {
                        maptool_load_node_table(&p,1);
                        fprintf(stderr,"PROGRESS: Phase %d: counting references and resolving ways\n",phase);
-                       osm_count_references(&p, suffix);
+                       osm_count_references(&p, suffix, p.start == phase);
                }
                phase++;
                if (p.start <= phase && p.end >= phase) {
index 4a2c231..7c498e9 100644 (file)
@@ -256,6 +256,7 @@ long long item_bin_get_id(struct item_bin *ib);
 void flush_nodes(int final);
 void sort_countries(int keep_tmpfiles);
 void process_turn_restrictions(FILE *in, FILE *coords, FILE *ways, FILE *ways_index, FILE *out);
+void clear_node_item_buffer(void);
 void ref_ways(FILE *in);
 void resolve_ways(FILE *in, FILE *out);
 FILE *resolve_ways_file(FILE *in, char *suffix, char *filename);
index e8713d0..1b4a628 100644 (file)
@@ -1253,6 +1253,16 @@ osm_add_node(osmid id, double lat, double lon)
 
 }
 
+void
+clear_node_item_buffer(void)
+{
+       int j,count=node_buffer.size/sizeof(struct node_item);
+       struct node_item *ni=(struct node_item *)(node_buffer.base);
+       for (j = 0 ; j < count ; j++) {
+               ni[j].ref_way=0;
+       }
+}
+
 static struct node_item *
 node_item_get(int id)
 {