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 |
|
#if 1 |
33 |
|
/* currently 31 bit is still sufficient since there are less than */ |
34 |
|
/* 2 billion nodes or changesets */ |
35 |
|
typedef gint32 item_id_t; |
36 |
|
#define G_TYPE_ITEM_ID_T G_TYPE_INT |
37 |
|
#define ITEM_ID_FORMAT "%" G_GINT32_FORMAT |
38 |
|
#else |
39 |
|
/* the future may require us to switch to 64 bits */ |
40 |
|
typedef gint64 item_id_t; |
41 |
|
#define G_TYPE_ITEM_ID_T G_TYPE_INT64 |
42 |
|
#define ITEM_ID_FORMAT "%" G_GINT64_FORMAT |
43 |
|
#endif |
44 |
|
|
45 |
#define ID_ILLEGAL ((item_id_t)0) |
#define ID_ILLEGAL ((item_id_t)0) |
46 |
|
|
66 |
|
|
67 |
typedef struct node_s { |
typedef struct node_s { |
68 |
item_id_t id; |
item_id_t id; |
69 |
|
item_id_t version; |
70 |
pos_t pos; |
pos_t pos; |
71 |
lpos_t lpos; |
lpos_t lpos; |
72 |
user_t *user; |
user_t *user; |
96 |
|
|
97 |
typedef struct way_s { |
typedef struct way_s { |
98 |
item_id_t id; |
item_id_t id; |
99 |
|
item_id_t version; |
100 |
|
item_id_t changeset; |
101 |
user_t *user; |
user_t *user; |
102 |
gboolean visible; |
gboolean visible; |
103 |
time_t time; |
time_t time; |
139 |
|
|
140 |
typedef struct relation_s { |
typedef struct relation_s { |
141 |
item_id_t id; |
item_id_t id; |
142 |
|
item_id_t version; |
143 |
|
item_id_t changeset; |
144 |
user_t *user; |
user_t *user; |
145 |
gboolean visible; |
gboolean visible; |
146 |
time_t time; |
time_t time; |
163 |
/* the current hash table uses 16 bits. each table thus is */ |
/* the current hash table uses 16 bits. each table thus is */ |
164 |
/* 256 kbytes (2^16 * sizeof(void*)) in size */ |
/* 256 kbytes (2^16 * sizeof(void*)) in size */ |
165 |
#define ID2HASH(a) ((unsigned short)(a) ^ (unsigned short)((a)>>16)) |
#define ID2HASH(a) ((unsigned short)(a) ^ (unsigned short)((a)>>16)) |
|
|
|
166 |
typedef struct hash_item_s { |
typedef struct hash_item_s { |
167 |
union { |
union { |
168 |
node_t *node; |
node_t *node; |
181 |
ILLEGAL=0, NODE, WAY, RELATION, NODE_ID, WAY_ID, RELATION_ID |
ILLEGAL=0, NODE, WAY, RELATION, NODE_ID, WAY_ID, RELATION_ID |
182 |
} type_t; |
} type_t; |
183 |
|
|
184 |
typedef struct member_s { |
typedef struct { |
185 |
type_t type; |
type_t type; |
|
char *role; |
|
|
|
|
186 |
union { |
union { |
187 |
node_t *node; |
node_t *node; |
188 |
way_t *way; |
way_t *way; |
189 |
relation_t *relation; |
relation_t *relation; |
|
void *ptr; |
|
190 |
item_id_t id; |
item_id_t id; |
191 |
|
void *ptr; |
192 |
}; |
}; |
193 |
|
} object_t; |
194 |
|
|
195 |
|
typedef struct member_s { |
196 |
|
object_t object; |
197 |
|
char *role; |
198 |
struct member_s *next; |
struct member_s *next; |
199 |
} member_t; |
} member_t; |
200 |
|
|
216 |
#include <libxml/parser.h> |
#include <libxml/parser.h> |
217 |
#include <libxml/tree.h> |
#include <libxml/tree.h> |
218 |
|
|
219 |
osm_t *osm_parse(char *filename); |
osm_t *osm_parse(char *path, char *filename); |
220 |
gboolean osm_sanity_check(GtkWidget *parent, osm_t *osm); |
gboolean osm_sanity_check(GtkWidget *parent, osm_t *osm); |
221 |
tag_t *osm_parse_osm_tag(osm_t *osm, xmlDocPtr doc, xmlNode *a_node); |
tag_t *osm_parse_osm_tag(osm_t *osm, xmlDocPtr doc, xmlNode *a_node); |
222 |
node_chain_t *osm_parse_osm_way_nd(osm_t *osm, xmlDocPtr doc, xmlNode *a_node); |
node_chain_t *osm_parse_osm_way_nd(osm_t *osm, xmlDocPtr doc, xmlNode *a_node); |
252 |
gboolean osm_tag_key_and_value_present(tag_t *haystack, tag_t *tag); |
gboolean osm_tag_key_and_value_present(tag_t *haystack, tag_t *tag); |
253 |
gboolean osm_tag_key_other_value_present(tag_t *haystack, tag_t *tag); |
gboolean osm_tag_key_other_value_present(tag_t *haystack, tag_t *tag); |
254 |
|
|
255 |
char *osm_generate_xml_node(osm_t *osm, node_t *node); |
char *osm_generate_xml_changeset(osm_t *osm, char *comment); |
256 |
char *osm_generate_xml_way(osm_t *osm, way_t *way); |
char *osm_generate_xml_node(osm_t *osm, item_id_t changeset, node_t *node); |
257 |
char *osm_generate_xml_relation(osm_t *osm, relation_t *relation); |
char *osm_generate_xml_way(osm_t *osm, item_id_t changeset, way_t *way); |
258 |
|
char *osm_generate_xml_relation(osm_t *osm, item_id_t changeset, |
259 |
|
relation_t *relation); |
260 |
|
|
261 |
node_t *osm_get_node_by_id(osm_t *osm, item_id_t id); |
node_t *osm_get_node_by_id(osm_t *osm, item_id_t id); |
262 |
way_t *osm_get_way_by_id(osm_t *osm, item_id_t id); |
way_t *osm_get_way_by_id(osm_t *osm, item_id_t id); |
285 |
|
|
286 |
void osm_way_reverse(way_t *way); |
void osm_way_reverse(way_t *way); |
287 |
guint osm_way_reverse_direction_sensitive_tags(way_t *way); |
guint osm_way_reverse_direction_sensitive_tags(way_t *way); |
288 |
|
guint osm_way_reverse_direction_sensitive_roles(osm_t *osm, way_t *way); |
289 |
|
|
290 |
void osm_node_remove_from_relation(osm_t *osm, node_t *node); |
void osm_node_remove_from_relation(osm_t *osm, node_t *node); |
291 |
void osm_way_remove_from_relation(osm_t *osm, way_t *way); |
void osm_way_remove_from_relation(osm_t *osm, way_t *way); |
296 |
|
|
297 |
tag_t *osm_tags_copy(tag_t *tag, gboolean update_creator); |
tag_t *osm_tags_copy(tag_t *tag, gboolean update_creator); |
298 |
|
|
|
char *osm_type_string(type_t type); |
|
|
char *osm_id_string(type_t type, void *object); |
|
|
char *osm_object_string(type_t type, void *object); |
|
|
tag_t *osm_object_get_tags(type_t type, void *object); |
|
|
|
|
299 |
relation_t *osm_relation_new(void); |
relation_t *osm_relation_new(void); |
300 |
void osm_relation_free(relation_t *relation); |
void osm_relation_free(relation_t *relation); |
301 |
void osm_relation_attach(osm_t *osm, relation_t *relation); |
void osm_relation_attach(osm_t *osm, relation_t *relation); |
303 |
gboolean permanently); |
gboolean permanently); |
304 |
gint osm_relation_members_num(relation_t *relation); |
gint osm_relation_members_num(relation_t *relation); |
305 |
|
|
306 |
|
char *osm_object_type_string(object_t *object); |
307 |
|
char *osm_object_id_string(object_t *object); |
308 |
|
char *osm_object_string(object_t *object); |
309 |
|
tag_t *osm_object_get_tags(object_t *object); |
310 |
|
void osm_object_set_flags(object_t *map_item, int set, int clr); |
311 |
|
|
312 |
#endif /* OSM_H */ |
#endif /* OSM_H */ |
313 |
|
|
314 |
// vim:et:ts=8:sw=2:sts=2:ai |
// vim:et:ts=8:sw=2:sts=2:ai |