Diff of /trunk/src/osm.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2 by achadwick, Wed Dec 10 00:00:05 2008 UTC revision 155 by harbaum, Tue Mar 31 10:19:50 2009 UTC
# Line 27  Line 27 
27  #define OSM_FLAG_NEW      (1<<2)  #define OSM_FLAG_NEW      (1<<2)
28  #define OSM_FLAG_HIDDEN   (1<<3)  #define OSM_FLAG_HIDDEN   (1<<3)
29    
30  typedef gulong item_id_t;  /* item_id_t needs to be signed as osm2go uses negative ids for items */
31    /* not yet registered with the main osm database */
32    typedef glong item_id_t;
33    #define G_TYPE_ITEM_ID_T G_TYPE_LONG
34    
35  #define ID_ILLEGAL  ((item_id_t)0)  #define ID_ILLEGAL  ((item_id_t)0)
36    
# Line 95  typedef struct way_s { Line 98  typedef struct way_s {
98      gulong color;      gulong color;
99      gint width;      gint width;
100      float zoom_max;      float zoom_max;
101        gboolean dashed;
102        guint dash_length;
103    
104      union {      union {
105        struct {        struct {
# Line 136  typedef struct relation_chain_s { Line 141  typedef struct relation_chain_s {
141    struct relation_chain_s *next;    struct relation_chain_s *next;
142  } relation_chain_t;  } relation_chain_t;
143    
144    /* two of these hash tables are used, one for nodes and one for ways */
145    /* currently relations aren't used often enough to justify the use */
146    /* of a hash table */
147    
148    /* the current hash table uses 16 bits. each table thus is */
149    /* 256 kbytes (2^16 * sizeof(void*)) in size */
150    #define ID2HASH(a) ((unsigned short)(a) ^ (unsigned short)((a)>>16))
151    
152    typedef struct hash_item_s {
153      union {
154        node_t *node;
155        way_t *way;
156        relation_t *relation;
157      } data;
158    
159      struct hash_item_s *next;
160    } hash_item_t;
161    
162    typedef struct {
163      hash_item_t *hash[65536];
164    } hash_table_t;
165    
166  typedef enum {  typedef enum {
167    ILLEGAL=0, NODE, WAY, RELATION, NODE_ID, WAY_ID, RELATION_ID    ILLEGAL=0, NODE, WAY, RELATION, NODE_ID, WAY_ID, RELATION_ID
168  } type_t;  } type_t;
169    
170  typedef struct member_s {  typedef struct {
171    type_t type;    type_t type;
   char   *role;  
   
172    union {    union {
173      node_t *node;      node_t *node;
174      way_t *way;      way_t *way;
175      relation_t *relation;      relation_t *relation;
176      item_id_t id;      item_id_t id;
177        void *ptr;
178    };    };
179    } object_t;
180    
181    typedef struct member_s {
182      object_t object;
183      char   *role;
184    struct member_s *next;    struct member_s *next;
185  } member_t;  } member_t;
186    
187  typedef struct osm_s {  typedef struct osm_s {
188    bounds_t *bounds;   // original bounds as they appear in the file    bounds_t *bounds;   // original bounds as they appear in the file
189    user_t *user;    user_t *user;
190    
191    node_t *node;    node_t *node;
192      hash_table_t *node_hash;
193    
194    way_t  *way;    way_t  *way;
195      hash_table_t *way_hash;
196    
197      // hashing relations doesn't yet make much sense as relations are quite rare
198    relation_t  *relation;    relation_t  *relation;
199    
200  } osm_t;  } osm_t;
201    
202  #include <libxml/parser.h>  #include <libxml/parser.h>
# Line 217  way_chain_t *osm_node_to_way(osm_t *osm, Line 254  way_chain_t *osm_node_to_way(osm_t *osm,
254  /* ----------- edit functions ----------- */  /* ----------- edit functions ----------- */
255  node_t *osm_node_new(osm_t *osm, gint x, gint y);  node_t *osm_node_new(osm_t *osm, gint x, gint y);
256  void osm_node_attach(osm_t *osm, node_t *node);  void osm_node_attach(osm_t *osm, node_t *node);
257    void osm_node_restore(osm_t *osm, node_t *node);
258  way_chain_t *osm_node_delete(osm_t *osm, struct icon_s **icon, node_t *node,  way_chain_t *osm_node_delete(osm_t *osm, struct icon_s **icon, node_t *node,
259                               gboolean permanently, gboolean affect_ways);                               gboolean permanently, gboolean affect_ways);
260  void osm_way_delete(osm_t *osm, struct icon_s **icon, way_t *way,  void osm_way_delete(osm_t *osm, struct icon_s **icon, way_t *way,
# Line 229  gboolean osm_position_within_bounds(osm_ Line 267  gboolean osm_position_within_bounds(osm_
267  item_id_t osm_new_way_id(osm_t *osm);  item_id_t osm_new_way_id(osm_t *osm);
268  gboolean osm_way_ends_with_node(way_t *way, node_t *node);  gboolean osm_way_ends_with_node(way_t *way, node_t *node);
269    
270  void osm_way_revert(way_t *way);  void osm_way_reverse(way_t *way);
271    guint osm_way_reverse_direction_sensitive_tags(way_t *way);
272    guint osm_way_reverse_direction_sensitive_roles(osm_t *osm, way_t *way);
273    
274  void osm_node_remove_from_relation(osm_t *osm, node_t *node);  void osm_node_remove_from_relation(osm_t *osm, node_t *node);
275  void osm_way_remove_from_relation(osm_t *osm, way_t *way);  void osm_way_remove_from_relation(osm_t *osm, way_t *way);
# Line 240  void osm_way_rotate(way_t *way, gint off Line 280  void osm_way_rotate(way_t *way, gint off
280    
281  tag_t *osm_tags_copy(tag_t *tag, gboolean update_creator);  tag_t *osm_tags_copy(tag_t *tag, gboolean update_creator);
282    
283    relation_t *osm_relation_new(void);
284    void osm_relation_free(relation_t *relation);
285    void osm_relation_attach(osm_t *osm, relation_t *relation);
286    void osm_relation_delete(osm_t *osm, relation_t *relation,
287                             gboolean permanently);
288    gint osm_relation_members_num(relation_t *relation);
289    
290    char *osm_object_type_string(object_t *object);
291    char *osm_object_id_string(object_t *object);
292    char *osm_object_string(object_t *object);
293    tag_t *osm_object_get_tags(object_t *object);
294    void osm_object_set_flags(object_t *map_item, int set, int clr);
295    
296  #endif /* OSM_H */  #endif /* OSM_H */
297    
298    // vim:et:ts=8:sw=2:sts=2:ai

Legend:
Removed from v.2  
changed lines
  Added in v.155