Diff of /trunk/src/osm.h

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

src/osm.h revision 1 by harbaum, Tue Dec 9 20:06:06 2008 UTC trunk/src/osm.h revision 98 by achadwick, Sun Feb 22 03:41:09 2009 UTC
# Line 95  typedef struct way_s { Line 95  typedef struct way_s {
95      gulong color;      gulong color;
96      gint width;      gint width;
97      float zoom_max;      float zoom_max;
98        gboolean dashed;
99        guint dash_length;
100    
101      union {      union {
102        struct {        struct {
# Line 136  typedef struct relation_chain_s { Line 138  typedef struct relation_chain_s {
138    struct relation_chain_s *next;    struct relation_chain_s *next;
139  } relation_chain_t;  } relation_chain_t;
140    
141    /* two of these hash tables are used, one for nodes and one for ways */
142    /* currently relations aren't used often enough to justify the use */
143    /* of a hash table */
144    
145    /* the current hash table uses 16 bits. each table thus is */
146    /* 256 kbytes (2^16 * sizeof(void*)) in size */
147    #define ID2HASH(a) ((unsigned short)(a) ^ (unsigned short)((a)>>16))
148    
149    typedef struct hash_item_s {
150      union {
151        node_t *node;
152        way_t *way;
153        relation_t *relation;
154      } data;
155    
156      struct hash_item_s *next;
157    } hash_item_t;
158    
159    typedef struct {
160      hash_item_t *hash[65536];
161    } hash_table_t;
162    
163  typedef enum {  typedef enum {
164    ILLEGAL=0, NODE, WAY, RELATION, NODE_ID, WAY_ID, RELATION_ID    ILLEGAL=0, NODE, WAY, RELATION, NODE_ID, WAY_ID, RELATION_ID
165  } type_t;  } type_t;
# Line 148  typedef struct member_s { Line 172  typedef struct member_s {
172      node_t *node;      node_t *node;
173      way_t *way;      way_t *way;
174      relation_t *relation;      relation_t *relation;
175        void *ptr;
176      item_id_t id;      item_id_t id;
177    };    };
178    
# Line 157  typedef struct member_s { Line 182  typedef struct member_s {
182  typedef struct osm_s {  typedef struct osm_s {
183    bounds_t *bounds;   // original bounds as they appear in the file    bounds_t *bounds;   // original bounds as they appear in the file
184    user_t *user;    user_t *user;
185    
186    node_t *node;    node_t *node;
187      hash_table_t *node_hash;
188    
189    way_t  *way;    way_t  *way;
190      hash_table_t *way_hash;
191    
192      // hashing relations doesn't yet make much sense as relations are quite rare
193    relation_t  *relation;    relation_t  *relation;
194    
195  } osm_t;  } osm_t;
196    
197  #include <libxml/parser.h>  #include <libxml/parser.h>
# Line 217  way_chain_t *osm_node_to_way(osm_t *osm, Line 249  way_chain_t *osm_node_to_way(osm_t *osm,
249  /* ----------- edit functions ----------- */  /* ----------- edit functions ----------- */
250  node_t *osm_node_new(osm_t *osm, gint x, gint y);  node_t *osm_node_new(osm_t *osm, gint x, gint y);
251  void osm_node_attach(osm_t *osm, node_t *node);  void osm_node_attach(osm_t *osm, node_t *node);
252    void osm_node_restore(osm_t *osm, node_t *node);
253  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,
254                               gboolean permanently, gboolean affect_ways);                               gboolean permanently, gboolean affect_ways);
255  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 262  gboolean osm_position_within_bounds(osm_
262  item_id_t osm_new_way_id(osm_t *osm);  item_id_t osm_new_way_id(osm_t *osm);
263  gboolean osm_way_ends_with_node(way_t *way, node_t *node);  gboolean osm_way_ends_with_node(way_t *way, node_t *node);
264    
265  void osm_way_revert(way_t *way);  void osm_way_reverse(way_t *way);
266    guint osm_way_reverse_direction_sensitive_tags(way_t *way);
267    
268  void osm_node_remove_from_relation(osm_t *osm, node_t *node);  void osm_node_remove_from_relation(osm_t *osm, node_t *node);
269  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 274  void osm_way_rotate(way_t *way, gint off
274    
275  tag_t *osm_tags_copy(tag_t *tag, gboolean update_creator);  tag_t *osm_tags_copy(tag_t *tag, gboolean update_creator);
276    
277    char *osm_type_string(type_t type);
278    char *osm_id_string(type_t type, void *object);
279    char *osm_object_string(type_t type, void *object);
280    tag_t *osm_object_get_tags(type_t type, void *object);
281    
282    relation_t *osm_relation_new(void);
283    void osm_relation_free(relation_t *relation);
284    void osm_relation_attach(osm_t *osm, relation_t *relation);
285    void osm_relation_delete(osm_t *osm, relation_t *relation,
286                             gboolean permanently);
287    gint osm_relation_members_num(relation_t *relation);
288    
289  #endif /* OSM_H */  #endif /* OSM_H */
290    
291    // vim:et:ts=8:sw=2:sts=2:ai

Legend:
Removed from v.1  
changed lines
  Added in v.98