1 #ifndef OSMIUM_BUILDER_OSM_OBJECT_BUILDER_HPP 2 #define OSMIUM_BUILDER_OSM_OBJECT_BUILDER_HPP 39 #include <initializer_list> 81 void add_tag(
const char* key,
const char* value) {
83 throw std::length_error(
"OSM tag key is too long");
86 throw std::length_error(
"OSM tag value is too long");
88 add_size(append(key) + append(value));
99 void add_tag(
const char* key,
const size_t key_length,
const char* value,
const size_t value_length) {
101 throw std::length_error(
"OSM tag key is too long");
104 throw std::length_error(
"OSM tag value is too long");
116 void add_tag(
const std::string& key,
const std::string& value) {
118 throw std::length_error(
"OSM tag key is too long");
121 throw std::length_error(
"OSM tag value is too long");
133 add_size(append(tag.
key()) + append(tag.
value()));
141 void add_tag(
const std::pair<const char* const, const char* const>& tag) {
142 add_tag(tag.first, tag.second);
144 void add_tag(
const std::pair<const char* const, const char*>& tag) {
145 add_tag(tag.first, tag.second);
147 void add_tag(
const std::pair<const char*, const char* const>& tag) {
148 add_tag(tag.first, tag.second);
150 void add_tag(
const std::pair<const char*, const char*>& tag) {
151 add_tag(tag.first, tag.second);
159 void add_tag(
const std::pair<const std::string&, const std::string&>& tag) {
160 add_tag(tag.first, tag.second);
165 template <
typename T>
175 static_cast<Builder*
>(
this)->add_padding();
184 add_node_ref(
NodeRef(ref, location));
206 throw std::length_error(
"OSM relation member role is too long");
240 add_role(*member, role, role_length);
242 add_item(full_member);
258 add_member(type, ref, role, std::strlen(role), full_member);
273 add_member(type, ref, role.data(), role.size(), full_member);
284 throw std::length_error(
"OSM user name is too long");
295 if (length > std::numeric_limits<osmium::string_size_type>::max() - 1) {
296 throw std::length_error(
"OSM changeset comment is too long");
310 assert(!m_comment &&
"You have to always call both add_comment() and then add_comment_text() in that order for each comment!");
315 assert(!m_comment &&
"You have to always call both add_comment() and then add_comment_text() in that order for each comment!");
316 m_comment = reserve_space_for<osmium::ChangesetComment>();
319 add_user(*m_comment, user, std::strlen(user));
323 assert(m_comment &&
"You have to always call both add_comment() and then add_comment_text() in that order for each comment!");
324 add_text(*m_comment, text, std::strlen(text));
329 assert(m_comment &&
"You have to always call both add_comment() and then add_comment_text() in that order for each comment!");
330 add_text(*m_comment, text.c_str(), text.size());
336 template <
typename T>
343 static_cast<Builder*
>(
this)->reserve_space_for<string_size_type>();
347 void add_tags(
const std::initializer_list<std::pair<const char*, const char*>>& tags) {
349 for (
const auto& p : tags) {
350 tl_builder.
add_tag(p.first, p.second);
369 for (
const auto& node_ref : nodes) {
407 #endif // OSMIUM_BUILDER_OSM_OBJECT_BUILDER_HPP void add_tag(const std::pair< const char *const, const char *const > &tag)
Definition: osm_object_builder.hpp:141
Definition: osm_object_builder.hpp:337
NodeRefListBuilder< InnerRing > InnerRingBuilder
Definition: osm_object_builder.hpp:191
~TagListBuilder()
Definition: osm_object_builder.hpp:71
Definition: changeset.hpp:128
changeset_id_type changeset() const noexcept
Get changeset id of this object.
Definition: object.hpp:210
type
Definition: entity_bits.hpp:60
OSMObject & set_timestamp(const osmium::Timestamp ×tamp) noexcept
Definition: object.hpp:284
const char * value() const
Definition: tag.hpp:83
WayBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: osm_object_builder.hpp:363
AreaBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: osm_object_builder.hpp:380
void add_user(osmium::ChangesetComment &comment, const char *user, const size_t length)
Definition: osm_object_builder.hpp:282
void add_member(osmium::item_type type, object_id_type ref, const char *role, const osmium::OSMObject *full_member=nullptr)
Definition: osm_object_builder.hpp:257
void initialize_from_object(const osmium::OSMObject &source)
Definition: osm_object_builder.hpp:387
OSMObjectBuilder< osmium::Node > NodeBuilder
Definition: osm_object_builder.hpp:356
item_type
Definition: item_type.hpp:43
void add_tag(const osmium::Tag &tag)
Definition: osm_object_builder.hpp:132
~RelationMemberListBuilder()
Definition: osm_object_builder.hpp:219
Definition: relation.hpp:148
OSMObject & set_id(object_id_type id) noexcept
Definition: object.hpp:124
RelationMemberListBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: osm_object_builder.hpp:215
const char * key() const noexcept
Definition: tag.hpp:79
Definition: osm_object_builder.hpp:278
osmium::object_id_type object_id_to_area_id(osmium::object_id_type id, osmium::item_type type) noexcept
Definition: area.hpp:92
NodeRefListBuilder< WayNodeList > WayNodeListBuilder
Definition: osm_object_builder.hpp:189
object_version_type version() const noexcept
Get version of this object.
Definition: object.hpp:186
void add_text(osmium::ChangesetComment &comment, const char *text, const size_t length)
Definition: osm_object_builder.hpp:290
Definition: osm_object_builder.hpp:166
void add_tag(const std::pair< const std::string &, const std::string & > &tag)
Definition: osm_object_builder.hpp:159
void add_tag(const char *key, const size_t key_length, const char *value, const size_t value_length)
Definition: osm_object_builder.hpp:99
bool visible() const noexcept
Is this object marked visible (ie not deleted)?
Definition: object.hpp:144
Definition: relation.hpp:54
void add_tag(const std::pair< const char *const, const char * > &tag)
Definition: osm_object_builder.hpp:144
int64_t object_id_type
Type for OSM object (node, way, or relation) IDs.
Definition: types.hpp:45
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
void add_tags(const std::initializer_list< std::pair< const char *, const char * >> &tags)
Definition: osm_object_builder.hpp:347
void add_node_refs(const std::initializer_list< osmium::NodeRef > &nodes)
Definition: osm_object_builder.hpp:367
void add_comment(osmium::Timestamp date, osmium::user_id_type uid, const char *user)
Definition: osm_object_builder.hpp:314
osmium::Timestamp timestamp() const noexcept
Get timestamp when this object last changed.
Definition: object.hpp:274
Definition: timestamp.hpp:56
OSMObjectBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: osm_object_builder.hpp:341
user_id_type uid() const noexcept
Get user id of this object.
Definition: object.hpp:234
uint16_t string_size_type
Definition: types.hpp:59
void add_tag(const std::pair< const char *, const char * > &tag)
Definition: osm_object_builder.hpp:150
NodeRefListBuilder< OuterRing > OuterRingBuilder
Definition: osm_object_builder.hpp:190
const char * user() const noexcept
Get user name for this object.
Definition: object.hpp:290
OSMObject & set_changeset(changeset_id_type changeset) noexcept
Definition: object.hpp:219
void add_member(osmium::item_type type, object_id_type ref, const char *role, const size_t role_length, const osmium::OSMObject *full_member=nullptr)
Definition: osm_object_builder.hpp:236
void add_tag(const std::pair< const char *, const char *const > &tag)
Definition: osm_object_builder.hpp:147
Definition: location.hpp:79
Definition: osm_object_builder.hpp:359
OSMObject & set_version(object_version_type version) noexcept
Definition: object.hpp:195
void set_role_size(string_size_type size) noexcept
Definition: relation.hpp:94
void add_member(osmium::item_type type, object_id_type ref, const std::string &role, const osmium::OSMObject *full_member=nullptr)
Definition: osm_object_builder.hpp:272
void add_user(TBuilder &builder, const TArgs &...args)
Definition: attr.hpp:584
NodeRefListBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: osm_object_builder.hpp:170
void add_comment_text(const char *text)
Definition: osm_object_builder.hpp:322
Definition: buffer.hpp:97
Definition: builder.hpp:186
OSMObject & set_visible(bool visible) noexcept
Definition: object.hpp:163
object_id_type id() const noexcept
Get ID of this object.
Definition: object.hpp:110
~NodeRefListBuilder()
Definition: osm_object_builder.hpp:174
void add_comment_text(const std::string &text)
Definition: osm_object_builder.hpp:328
ObjectBuilder< osmium::Changeset > ChangesetBuilder
Definition: osm_object_builder.hpp:401
void add_role(osmium::RelationMember &member, const char *role, const size_t length)
Definition: osm_object_builder.hpp:204
uint32_t item_size_type
Definition: item.hpp:50
void add_node_ref(const object_id_type ref, const osmium::Location &location=Location{})
Definition: osm_object_builder.hpp:183
OSMObjectBuilder< osmium::Relation > RelationBuilder
Definition: osm_object_builder.hpp:357
~ChangesetDiscussionBuilder()
Definition: osm_object_builder.hpp:309
void add_tag(const std::string &key, const std::string &value)
Definition: osm_object_builder.hpp:116
node, way, relation, or area object
Definition: entity_bits.hpp:69
Definition: node_ref.hpp:50
item_type type() const noexcept
Definition: item.hpp:155
OSMObject & set_uid(user_id_type uid) noexcept
Definition: object.hpp:243
Definition: builder.hpp:57
Definition: osm_object_builder.hpp:193
constexpr const int max_osm_string_length
Definition: types.hpp:62
TagListBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: osm_object_builder.hpp:67
void add_tag(const char *key, const char *value)
Definition: osm_object_builder.hpp:81
ChangesetDiscussionBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: osm_object_builder.hpp:305
Definition: object.hpp:58
uint32_t user_id_type
Type for OSM user IDs.
Definition: types.hpp:49
Definition: osm_object_builder.hpp:63
void add_node_ref(const NodeRef &node_ref)
Definition: osm_object_builder.hpp:178
Definition: osm_object_builder.hpp:376