Changeset 16 for trunk/osm05.c


Ignore:
Timestamp:
Aug 18, 2008, 1:58:33 PM (6 years ago)
Author:
marius
Message:

start using glib

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/osm05.c

    r15 r16  
    1717 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
    1818 */ 
    19  
     19#include <glib.h> 
    2020#include <time.h> 
    2121#include <expat.h> 
     
    2323#include <string.h> 
    2424 
    25 #include "compat.h" 
    26  
    2725#include "list.h" 
    28 #include "strlist.h" 
    2926#include "main.h" 
    3027#include "osm05.h" 
     
    3431// External Vars 
    3532extern memphisOpt   *opts; 
    36 extern strList      *keyStrings; 
    37 extern strList      *valStrings; 
     33GTree               *keyStrings; 
     34GTree               *valStrings; 
    3835 
    3936// Pointers to work with 
    4037osmTag      *cTag = NULL; 
    4138osmNode     *cNode = NULL; 
    42 osmNd       *cNd = NULL; 
    4339osmWay      *cWay = NULL; 
    4440 
     
    10096 
    10197       // Insert Node 
    102        LL_INSERT_ID(cNode,osm->nodes); 
     98       g_hash_table_insert(osm->nodeidx, &cNode->id, cNode); 
    10399 
    104100       if (opts->debug > 1) 
     
    118114                    return; 
    119115                } 
    120                 cTag-> key = strlist_get(keyStrings,(char *) *(atts+1)); 
     116                cTag->key = g_tree_lookup(keyStrings, (char *) *(atts+1)); 
     117                if(cTag->key == NULL) { 
     118                    cTag->key = g_strdup((char *) *(atts+1)); 
     119                    g_tree_insert(keyStrings, cTag->key, cTag->key); 
     120                } 
    121121            } else if(strncmp((char *) *(atts), "v", 1) == 0) { 
    122122                if(strcmp(cTag->key, "layer") == 0) { 
     
    131131                    free(cTag); 
    132132                    cTag = NULL; 
    133                     if (cWay) 
    134                         cWay->name = strlist_get(valStrings,(char *) *(atts+1)); 
     133                    if (cWay) { 
     134                        cWay->name = g_tree_lookup(valStrings, (char *) *(atts+1)); 
     135                        if(cWay->name == NULL) { 
     136                            cWay->name = g_strdup((char *) *(atts+1)); 
     137                            g_tree_insert(valStrings, cWay->name, cWay->name); 
     138                        } 
     139                    } 
    135140                    return; 
    136141                } 
    137                 cTag->value = strlist_get(valStrings,(char *) *(atts+1)); 
     142                cTag->value = g_tree_lookup(valStrings, (char *) *(atts+1)); 
     143                if(cTag->value == NULL) { 
     144                    cTag->value = g_strdup((char *) *(atts+1)); 
     145                    g_tree_insert(valStrings, cTag->value, cTag->value); 
     146                } 
    138147            } 
    139148            atts+=2; 
    140149       } 
    141  
     150        
    142151       if (opts->debug > 1) 
    143152           fprintf(stdout,"Tag: %s => %s\n", cTag->key, cTag->value); 
     
    162171            } 
    163172            atts+=2; 
    164        } 
    165  
    166        cWay->tag = NULL; 
    167        cWay->nd = NULL; 
    168        cWay->name = NULL; 
    169        cWay->layer = 0; 
    170  
    171        // Insert Way 
    172        LL_INSERT_ID(cWay,osm->ways); 
    173  
    174        if (opts->debug > 1) 
    175            fprintf(stdout,"WAY(%i)\n", cWay->id); 
     173     } 
     174 
     175        cWay->tag = NULL; 
     176        cWay->nd = NULL; 
     177        cWay->name = NULL; 
     178        cWay->layer = 0; 
     179 
     180        // Insert Way 
     181        LL_INSERT_ID(cWay,osm->ways); 
     182 
     183        if (opts->debug > 1) 
     184            fprintf(stdout,"WAY(%i)\n", cWay->id); 
    176185    } 
    177186    // Parsing WayNode 
     
    190199 
    191200        if (ref) { 
    192             cNd = malloc(sizeof(osmNd)); 
    193  
    194             LL_SEARCH_ID(osm->nodes,ref,cNd->node); 
    195  
     201            osmNode *n; 
     202             
     203            n = g_hash_table_lookup(osm->nodeidx, &ref); /* TODO check return value */ 
     204  
    196205            // Insert WayNode 
    197             LL_APPEND(cNd,cWay->nd); 
    198  
     206            cWay->nd = g_slist_prepend(cWay->nd, n); 
     207  
    199208            if (opts->debug > 1) 
    200                 fprintf(stdout," ND( %f %f )\n", cNd->node->lat, cNd->node->lon); 
     209                fprintf(stdout," ND( %f %f )\n", n->lat, n->lon); 
    201210 
    202211            cNode=NULL; 
    203             cNd = NULL; 
    204212        } 
    205213    } 
     
    221229        cNode = NULL; 
    222230    } else if (strncmp((char *) name, "way", 3) == 0) { 
     231        if (cWay->nd != NULL) 
     232            cWay->nd = g_slist_reverse(cWay->nd); 
    223233        cWay = NULL; 
    224234    } 
     
    255265    osm = malloc(sizeof(osmFile)); 
    256266    osm->nodes = NULL; 
     267    osm->nodeidx = g_hash_table_new(g_int_hash, g_int_equal); 
    257268    osm->ways = NULL; 
    258269    osm->minlon = -190; 
Note: See TracChangeset for help on using the changeset viewer.