Changeset 177


Ignore:
Timestamp:
Oct 31, 2009, 11:42:43 PM (4 years ago)
Author:
simon
Message:
  • Add node and tag list functions
  • Remove all list makros from the osm parser
  • Migrate some types to glib types
Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/osm05.c

    r169 r177  
    22 * Memphis - Cairo Rederer for OSM in C 
    33 * Copyright (C) 2008  Marius Rieder <marius.rieder@durchmesser.ch> 
     4 * Copyright (C) 2009  Simon Wenner <simon@wenner.ch> 
    45 * 
    56 * This library is free software; you can redistribute it and/or 
     
    2425#include <string.h> 
    2526 
    26 #include "list.h" 
    2727#include "mlib.h" 
    2828#include "osm05.h" 
     
    4545    int cntNd; 
    4646}; 
     47 
     48static void 
     49way_list_prepend(osmWay *way, osmWay **list) 
     50{ 
     51    way->next = *list; 
     52    *list = way; 
     53} 
     54 
     55static void 
     56node_list_prepend(osmNode *node, osmNode **list) 
     57{ 
     58    node->next = *list; 
     59    *list = node; 
     60} 
     61 
     62static void 
     63tag_list_insert_key(osmTag *tag, osmTag **list) 
     64{ 
     65    osmTag *curr, *prev; 
     66 
     67    for (curr = *list, prev = NULL; curr != NULL; 
     68            prev = curr, curr = curr->next) { 
     69        if (strcmp(curr->key, tag->key) > 0) 
     70            break; 
     71    } 
     72    tag->next = curr; 
     73    if (prev) 
     74        prev->next = tag; 
     75    else 
     76        *list = tag; 
     77} 
    4778 
    4879/** 
     
    99130        osm->nodecnt++; 
    100131        g_hash_table_insert(osm->nodeidx, &data->cNode->id, data->cNode); 
    101         LL_PREPEND(data->cNode, osm->nodes); 
     132        node_list_prepend(data->cNode, &osm->nodes); 
    102133 
    103134        memphis_debug ("NODE: %i %f %f", data->cNode->id, 
     
    148179        data->cntTag++; 
    149180        if (data->cNode) 
    150             LL_INSERT_KEY(data->cTag, data->cNode->tag); 
     181            tag_list_insert_key(data->cTag, &data->cNode->tag); 
    151182        else if (data->cWay) 
    152             LL_INSERT_KEY(data->cTag, data->cWay->tag); 
     183            tag_list_insert_key(data->cTag, &data->cWay->tag); 
    153184 
    154185        data->cTag = NULL; 
     
    173204        // Insert Way 
    174205        osm->waycnt++; 
    175         LL_PREPEND(data->cWay, osm->ways); 
     206        way_list_prepend(data->cWay, &osm->ways); 
    176207 
    177208        memphis_debug ("WAY(%i)", data->cWay->id); 
     
    352383 
    353384        osmNode *node; 
    354         LIST_FOREACH(node, osm->nodes) { 
     385        for(node = osm->nodes; node != NULL; node = node->next) { 
    355386            if(node->lon < osm->minlon) 
    356387                osm->minlon = node->lon; 
     
    447478 
    448479        osmNode *node; 
    449         LIST_FOREACH(node, osm->nodes) { 
     480        for (node = osm->nodes; node != NULL; node = node->next) { 
    450481            if(node->lon < osm->minlon) 
    451482                osm->minlon = node->lon; 
  • trunk/src/osm05.h

    r169 r177  
    22 * Memphis - Cairo Rederer for OSM in C 
    33 * Copyright (C) 2008  Marius Rieder <marius.rieder@durchmesser.ch> 
     4 * Copyright (C) 2009  Simon Wenner <simon@wenner.ch> 
    45 * 
    56 * This library is free software; you can redistribute it and/or 
     
    3637        float lon; 
    3738        short int layer; 
    38         osmTag *tag; 
     39        osmTag *tag; // FIXME: this is a list! -> tags 
    3940        osmNode *next; 
    4041    }; 
     
    4546        short int layer; 
    4647        char    *name; 
    47         osmTag  *tag; 
     48        osmTag  *tag; // FIXME: this is a list! -> tags 
    4849        GSList  *nd; 
    4950        osmWay  *next; 
     
    6970        osmNode         *nodes;     // Node List 
    7071        GHashTable      *nodeidx;   // Node Hash 
    71         unsigned int    nodecnt;    // Node Count 
     72        guint           nodecnt;    // Node Count 
    7273        osmWay          *ways; 
    73         unsigned int    waycnt; 
    74         float           minlat; 
    75         float           minlon; 
    76         float           maxlat; 
    77         float           maxlon; 
     74        guint           waycnt; 
     75        gfloat          minlat; 
     76        gfloat          minlon; 
     77        gfloat          maxlat; 
     78        gfloat          maxlon; 
    7879    }; 
    7980 
    80 /* 
    81  * Prototypes 
    82  */ 
    8381osmFile* osmRead (const char *filename); 
    8482osmFile* osmRead_from_buffer (const char *buffer, guint size); 
Note: See TracChangeset for help on using the changeset viewer.