From 24ac36285cb171a0e124e1c5189b5849de8cd43c Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Mon, 14 Mar 2022 17:14:10 +0100 Subject: [PATCH] Added an interface for overriding tags --- osm.c | 17 +++++++++++++++++ osm.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/osm.c b/osm.c index 6c11e67..17f2001 100644 --- a/osm.c +++ b/osm.c @@ -146,6 +146,23 @@ void osm_obj_add_tag(struct osm_object *o, const char *key, const char *val) osm_obj_add_tag_raw(o, osm_key_encode(key), osm_val_encode(val)); } +void osm_obj_set_tag_raw(struct osm_object *o, osm_key_t key, osm_val_t val) +{ + CLIST_FOR_EACH(struct osm_tag *, t, o->tags) + if (t->key == key) + { + t->val = val; + return; + } + + osm_obj_add_tag_raw(o, key, val); +} + +void osm_obj_set_tag(struct osm_object *o, const char *key, const char *val) +{ + osm_obj_set_tag_raw(o, osm_key_encode(key), osm_val_encode(val)); +} + osm_val_t osm_obj_find_tag(struct osm_object *o, osm_key_t key) { CLIST_FOR_EACH(struct osm_tag *, t, o->tags) diff --git a/osm.h b/osm.h index d0df0c6..e7b8168 100644 --- a/osm.h +++ b/osm.h @@ -95,6 +95,8 @@ osm_id_t osm_parse_id(const char *str); struct osm_object *osm_obj_find_by_id(enum osm_object_type type, osm_id_t id); void osm_obj_add_tag(struct osm_object *o, const char *key, const char *val); void osm_obj_add_tag_raw(struct osm_object *o, osm_key_t key, osm_val_t val); +void osm_obj_set_tag(struct osm_object *o, const char *key, const char *val); +void osm_obj_set_tag_raw(struct osm_object *o, osm_key_t key, osm_val_t val); osm_val_t osm_obj_find_tag(struct osm_object *o, osm_val_t key); void osm_obj_dump(struct osm_object *o); void osm_obj_warn(struct osm_object *o, const char *msg, ...); -- 2.39.2