1 #ifndef OSMIUM_BUILDER_ATTR_HPP
2 #define OSMIUM_BUILDER_ATTR_HPP
39 #include <initializer_list>
43 #include <type_traits>
61 template <
typename THandler,
typename... TTypes>
64 template <
typename THandler>
65 struct is_handled_by<THandler> {
66 static constexpr
bool value =
false;
69 template <
typename THandler,
typename T,
typename... TRest>
70 struct is_handled_by<THandler, T, TRest...> {
71 static constexpr
bool value = std::is_base_of<typename T::handler, THandler>::value ||
72 is_handled_by<THandler, TRest...>::value;
75 template <
typename THandler,
typename... TTypes>
76 struct are_all_handled_by;
78 template <
typename THandler,
typename T>
79 struct are_all_handled_by<THandler, T> {
80 static constexpr
bool value = std::is_base_of<typename T::handler, THandler>::value;
83 template <
typename THandler,
typename T,
typename... TRest>
84 struct are_all_handled_by<THandler, T, TRest...> {
85 static constexpr
bool value = std::is_base_of<typename T::handler, THandler>::value &&
86 are_all_handled_by<THandler, TRest...>::value;
90 template <
template<
typename>
class Predicate,
typename... Ts>
91 struct static_none_of : std::is_same<std::tuple<std::false_type, typename Predicate<Ts>::type...>,
92 std::tuple<typename Predicate<Ts>::type..., std::false_type>>
96 template <
template<
typename>
class Predicate,
typename... Ts>
97 struct static_all_of : std::is_same<std::tuple<std::true_type, typename Predicate<Ts>::type...>,
98 std::tuple<typename Predicate<Ts>::type..., std::true_type>>
102 template <
typename THandler,
typename... TTypes>
103 struct is_handled_by {
104 template <
typename T>
105 using HasHandler = std::is_base_of<typename T::handler, THandler>;
107 static constexpr
bool value = !static_none_of<HasHandler, TTypes...>::value;
111 template <
typename THandler,
typename... TTypes>
112 struct are_all_handled_by {
113 template <
typename T>
114 using HasHandler = std::is_base_of<typename T::handler, THandler>;
116 static constexpr
bool value = static_all_of<HasHandler, TTypes...>::value;
122 template <
typename TType>
123 struct type_wrapper {
129 constexpr
explicit type_wrapper(
const TType& v) :
136 template <
typename TType>
137 struct iterator_wrapper {
144 constexpr iterator_wrapper(TType
begin, TType
end) :
148 constexpr TType
begin()
const {
152 constexpr TType
end()
const {
159 struct entity_handler {};
160 struct object_handler;
163 struct nodes_handler;
164 struct members_handler;
165 struct changeset_handler;
166 struct discussion_handler;
171 #define OSMIUM_ATTRIBUTE(_handler, _name, _type) \
172 struct _name : public osmium::builder::detail::type_wrapper<_type> { \
173 using handler = osmium::builder::detail::_handler;
175 #define OSMIUM_ATTRIBUTE_WITH_CONSTRUCTOR(_handler, _name, _type) \
176 OSMIUM_ATTRIBUTE(_handler, _name, _type) \
177 constexpr explicit _name(std::add_const<_type>::type& value) : \
178 type_wrapper(value) {} \
181 #define OSMIUM_ATTRIBUTE_ITER(_handler, _name) \
182 template <typename TIterator> \
183 struct _name : public osmium::builder::detail::iterator_wrapper<TIterator> { \
184 using handler = osmium::builder::detail::_handler; \
185 constexpr _name(TIterator first, TIterator last) : \
186 osmium::builder::detail::iterator_wrapper<TIterator>(first, last) {} \
197 constexpr explicit
_deleted(
bool value = true) noexcept :
198 type_wrapper(value) {}
202 constexpr explicit
_visible(
bool value = true) noexcept :
203 type_wrapper(value) {}
208 type_wrapper(value) {}
221 type_wrapper(value) {}
223 type_wrapper(
osmium::Location{lat, lon}) {}
227 constexpr explicit
_user(const
char* val) noexcept :
229 explicit _user(
const std::string& val) noexcept :
230 type_wrapper(val.c_str()) {}
258 constexpr
const char*
role() const noexcept {
288 constexpr
const char*
user() const noexcept {
292 constexpr
const char*
text() const noexcept {
315 type_wrapper(value) {}
316 explicit _tag(
const std::pair<const char* const, const char*>& value) :
318 explicit _tag(
const std::pair<const char*, const char* const>& value) :
320 explicit _tag(
const std::pair<const char*, const char*>& value) :
323 type_wrapper(
std::make_pair(value.first.c_str(), value.second.c_str())) {}
324 explicit _tag(
const char* key,
const char* val) :
325 type_wrapper(
std::make_pair(key, val)) {}
326 explicit _tag(
const std::string& key,
const std::string& val) :
327 type_wrapper(
std::make_pair(key.c_str(), val.c_str())) {}
330 template <
typename TTagIterator>
331 inline constexpr detail::tags_from_iterator_pair<TTagIterator>
_tags(TTagIterator first, TTagIterator last) {
332 return detail::tags_from_iterator_pair<TTagIterator>(first, last);
335 template <
typename TContainer>
336 inline detail::tags_from_iterator_pair<typename TContainer::const_iterator>
_tags(
const TContainer& container) {
337 return detail::tags_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
340 using tag_ilist = std::initializer_list<std::pair<const char*, const char*>>;
341 inline detail::tags_from_iterator_pair<tag_ilist::const_iterator>
_tags(
const tag_ilist& container) {
342 return detail::tags_from_iterator_pair<tag_ilist::const_iterator>(
std::begin(container),
std::end(container));
349 type_wrapper(NodeRef{value}) {}
350 constexpr
explicit _node(
const NodeRef& value) noexcept :
351 type_wrapper(value) {}
354 template <
typename TIdIterator>
355 inline constexpr detail::nodes_from_iterator_pair<TIdIterator>
_nodes(TIdIterator first, TIdIterator last) {
356 return detail::nodes_from_iterator_pair<TIdIterator>(first, last);
359 template <
typename TContainer>
360 inline detail::nodes_from_iterator_pair<typename TContainer::const_iterator>
_nodes(
const TContainer& container) {
361 return detail::nodes_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
366 return detail::nodes_from_iterator_pair<object_id_ilist::const_iterator>(
std::begin(container),
std::end(container));
370 inline detail::nodes_from_iterator_pair<node_ref_ilist::const_iterator>
_nodes(
const node_ref_ilist& container) {
371 return detail::nodes_from_iterator_pair<node_ref_ilist::const_iterator>(
std::begin(container),
std::end(container));
377 type_wrapper(value) {}
379 type_wrapper({
type,
id}) {}
381 type_wrapper({
type, id, role}) {}
383 type_wrapper({
type, id, role.c_str()}) {}
385 type_wrapper({member.type(), member.ref(), member.role()}) {}
388 template <
typename TMemberIterator>
389 inline constexpr detail::members_from_iterator_pair<TMemberIterator>
_members(TMemberIterator first, TMemberIterator last) {
390 return detail::members_from_iterator_pair<TMemberIterator>(first, last);
393 template <
typename TContainer>
394 inline detail::members_from_iterator_pair<typename TContainer::const_iterator>
_members(
const TContainer& container) {
395 return detail::members_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
399 inline detail::members_from_iterator_pair<member_ilist::const_iterator>
_members(
const member_ilist& container) {
400 return detail::members_from_iterator_pair<member_ilist::const_iterator>(
std::begin(container),
std::end(container));
411 type_wrapper(value) {}
413 type_wrapper({comment.date(), comment.uid(), comment.user(), comment.text()}) {}
416 template <
typename TCommentIterator>
417 inline constexpr detail::comments_from_iterator_pair<TCommentIterator>
_comments(TCommentIterator first, TCommentIterator last) {
418 return detail::comments_from_iterator_pair<TCommentIterator>(first, last);
421 template <
typename TContainer>
422 inline detail::comments_from_iterator_pair<typename TContainer::const_iterator>
_comments(
const TContainer& container) {
423 return detail::comments_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
428 return detail::comments_from_iterator_pair<comment_ilist::const_iterator>(
std::begin(container),
std::end(container));
432 template <
typename TIdIterator>
433 inline constexpr detail::outer_ring_from_iterator_pair<TIdIterator>
_outer_ring(TIdIterator first, TIdIterator last) {
434 return detail::outer_ring_from_iterator_pair<TIdIterator>(first, last);
437 template <
typename TContainer>
438 inline detail::outer_ring_from_iterator_pair<typename TContainer::const_iterator>
_outer_ring(
const TContainer& container) {
439 return detail::outer_ring_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
444 return detail::outer_ring_from_iterator_pair<object_id_ilist::const_iterator>(
std::begin(container),
std::end(container));
449 return detail::outer_ring_from_iterator_pair<node_ref_ilist::const_iterator>(
std::begin(container),
std::end(container));
452 template <
typename TIdIterator>
453 inline constexpr detail::inner_ring_from_iterator_pair<TIdIterator>
_inner_ring(TIdIterator first, TIdIterator last) {
454 return detail::inner_ring_from_iterator_pair<TIdIterator>(first, last);
457 template <
typename TContainer>
458 inline detail::inner_ring_from_iterator_pair<typename TContainer::const_iterator>
_inner_ring(
const TContainer& container) {
459 return detail::inner_ring_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
464 return detail::inner_ring_from_iterator_pair<object_id_ilist::const_iterator>(
std::begin(container),
std::end(container));
469 return detail::inner_ring_from_iterator_pair<node_ref_ilist::const_iterator>(
std::begin(container),
std::end(container));
475 #undef OSMIUM_ATTRIBUTE_ITER
476 #undef OSMIUM_ATTRIBUTE_WITH_CONSTRUCTOR
477 #undef OSMIUM_ATTRIBUTE
483 template <
typename TDummy>
488 changeset.set_id(
id.value);
492 changeset.set_num_changes(num_changes.value);
496 changeset.set_num_comments(num_comments.value);
500 changeset.set_created_at(created_at.value);
504 changeset.set_closed_at(closed_at.value);
508 changeset.set_uid(uid.value);
515 template <
typename TDummy>
520 object.set_id(
id.value);
524 object.set_version(version.value);
528 object.set_visible(visible.value);
532 object.set_deleted(deleted.value);
536 object.set_timestamp(timestamp.value);
540 object.set_changeset(changeset.value);
544 object.set_uid(uid.value);
554 node.set_location(location.value);
559 template <
typename THandler,
typename TBuilder,
typename... TArgs>
560 inline void add_basic(TBuilder& builder,
const TArgs&... args) noexcept {
561 (void)std::initializer_list<int>{
562 (THandler::set_value(builder.object(), args), 0)...
568 template <
typename... TArgs>
577 template <
typename TFirst,
typename... TRest>
578 inline constexpr
typename std::enable_if<!std::is_same<attr::_user, TFirst>::value,
const char*>
::type
579 get_user(
const TFirst&,
const TRest&... args) noexcept {
583 template <
typename TBuilder,
typename... TArgs>
584 inline void add_user(TBuilder& builder,
const TArgs&... args) {
585 builder.add_user(
get_user(args...));
592 template <
typename TDummy>
593 static void set_value(TagListBuilder&,
const TDummy&) noexcept {
597 builder.add_tag(tag.value);
600 template <
typename TIterator>
601 static void set_value(TagListBuilder& builder,
const attr::detail::tags_from_iterator_pair<TIterator>& tags) {
602 for (
const auto& tag : tags) {
603 builder.add_tag(tag);
611 template <
typename TDummy>
616 builder.add_node_ref(node_ref.value);
619 template <
typename TIterator>
621 for (
const auto& ref : nodes) {
622 builder.add_node_ref(ref);
630 template <
typename TDummy>
631 static void set_value(RelationMemberListBuilder&,
const TDummy&) noexcept {
635 builder.add_member(member.value.type(), member.value.ref(), member.value.role());
638 template <
typename TIterator>
639 static void set_value(RelationMemberListBuilder& builder,
const attr::detail::members_from_iterator_pair<TIterator>& members) {
640 for (
const auto& member : members) {
641 builder.add_member(member.type(), member.ref(), member.role());
649 template <
typename TDummy>
650 static void set_value(ChangesetDiscussionBuilder&,
const TDummy&) noexcept {
654 builder.add_comment(comment.value.date(), comment.value.uid(), comment.value.user());
655 builder.add_comment_text(comment.value.text());
658 template <
typename TIterator>
659 static void set_value(ChangesetDiscussionBuilder& builder,
const attr::detail::comments_from_iterator_pair<TIterator>& comments) {
660 for (
const auto& comment : comments) {
661 builder.add_comment(comment.date(), comment.uid(), comment.user());
662 builder.add_comment_text(comment.text());
670 template <
typename TDummy>
671 static void set_value(AreaBuilder&,
const TDummy&) noexcept {
674 template <
typename TIterator>
675 static void set_value(AreaBuilder& parent,
const attr::detail::outer_ring_from_iterator_pair<TIterator>& nodes) {
677 for (
const auto& ref : nodes) {
678 builder.add_node_ref(ref);
682 template <
typename TIterator>
683 static void set_value(AreaBuilder& parent,
const attr::detail::inner_ring_from_iterator_pair<TIterator>& nodes) {
685 for (
const auto& ref : nodes) {
686 builder.add_node_ref(ref);
694 template <
typename TBuilder,
typename THandler,
typename... TArgs>
695 inline typename std::enable_if<!is_handled_by<THandler, TArgs...>::value>
::type
699 template <
typename TBuilder,
typename THandler,
typename... TArgs>
700 inline typename std::enable_if<is_handled_by<THandler, TArgs...>::value>
::type
702 TBuilder builder(parent.
buffer(), &parent);
703 (void)std::initializer_list<int>{
704 (THandler::set_value(builder, args), 0)...
724 template <
typename... TArgs>
729 detail::add_basic<detail::node_handler>(builder, args...);
731 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
743 template <
typename... TArgs>
746 WayBuilder builder(buffer);
748 detail::add_basic<detail::object_handler>(builder, args...);
750 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
751 detail::add_list<WayNodeListBuilder, detail::nodes_handler>(builder, args...);
763 template <
typename... TArgs>
768 detail::add_basic<detail::object_handler>(builder, args...);
770 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
771 detail::add_list<RelationMemberListBuilder, detail::members_handler>(builder, args...);
783 template <
typename... TArgs>
788 detail::add_basic<detail::changeset_handler>(builder, args...);
790 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
791 detail::add_list<ChangesetDiscussionBuilder, detail::discussion_handler>(builder, args...);
803 template <
typename... TArgs>
806 AreaBuilder builder(buffer);
808 detail::add_basic<detail::object_handler>(builder, args...);
810 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
812 (void)std::initializer_list<int>{
826 template <
typename... TArgs>
831 (void)std::initializer_list<int>{
846 template <
typename... TArgs>
850 TagListBuilder builder(buffer);
851 (void)std::initializer_list<int>{
863 #endif // OSMIUM_BUILDER_ATTR_HPP
static void set_value(osmium::Changeset &changeset, attr::_cid id) noexcept
Definition: attr.hpp:487
static void set_value(ChangesetDiscussionBuilder &builder, const attr::detail::comments_from_iterator_pair< TIterator > &comments)
Definition: attr.hpp:659
NodeRefListBuilder< InnerRing > InnerRingBuilder
Definition: osm_object_builder.hpp:191
static void set_value(AreaBuilder &parent, const attr::detail::inner_ring_from_iterator_pair< TIterator > &nodes)
Definition: attr.hpp:683
constexpr _node(osmium::object_id_type value) noexcept
Definition: attr.hpp:348
osmium::memory::Buffer & buffer() noexcept
Return the buffer this builder is using.
Definition: builder.hpp:179
size_t add_tag_list(osmium::memory::Buffer &buffer, const TArgs &...args)
Definition: attr.hpp:847
static void set_value(RelationMemberListBuilder &builder, const attr::_member &member)
Definition: attr.hpp:634
static void set_value(WayNodeListBuilder &builder, const attr::_node &node_ref)
Definition: attr.hpp:615
std::initializer_list< std::pair< const char *, const char * >> tag_ilist
Definition: attr.hpp:340
static void set_value(osmium::OSMObject &object, attr::_uid uid) noexcept
Definition: attr.hpp:543
type
Definition: entity_bits.hpp:60
std::initializer_list< member_type > member_ilist
Definition: attr.hpp:398
constexpr _location(const osmium::Location &value) noexcept
Definition: attr.hpp:220
static void set_value(osmium::OSMObject &object, attr::_version version) noexcept
Definition: attr.hpp:523
osmium::item_type m_type
Definition: attr.hpp:238
#define OSMIUM_ATTRIBUTE(_handler, _name, _type)
Definition: attr.hpp:171
constexpr detail::comments_from_iterator_pair< TCommentIterator > _comments(TCommentIterator first, TCommentIterator last)
Definition: attr.hpp:417
OSMObjectBuilder< osmium::Node > NodeBuilder
Definition: osm_object_builder.hpp:356
item_type
Definition: item_type.hpp:43
static void set_value(RelationMemberListBuilder &, const TDummy &) noexcept
Definition: attr.hpp:631
std::enable_if<!is_handled_by< THandler, TArgs...>::value >::type add_list(osmium::builder::Builder &, const TArgs &...) noexcept
Definition: attr.hpp:696
constexpr _user(const char *val) noexcept
Definition: attr.hpp:227
_timestamp(const std::string &value)
Definition: attr.hpp:215
Definition: reader_iterator.hpp:39
size_t add_node(osmium::memory::Buffer &buffer, const TArgs &...args)
Definition: attr.hpp:725
static void set_value(osmium::OSMObject &object, attr::_deleted deleted) noexcept
Definition: attr.hpp:531
size_t add_area(osmium::memory::Buffer &buffer, const TArgs &...args)
Definition: attr.hpp:804
NodeRefListBuilder< WayNodeList > WayNodeListBuilder
Definition: osm_object_builder.hpp:189
static void set_value(ChangesetDiscussionBuilder &, const TDummy &) noexcept
Definition: attr.hpp:650
void add_basic(TBuilder &builder, const TArgs &...args) noexcept
Definition: attr.hpp:560
static void set_value(osmium::Changeset &changeset, attr::_uid uid) noexcept
Definition: attr.hpp:507
static void set_value(osmium::Changeset &changeset, attr::_num_comments num_comments) noexcept
Definition: attr.hpp:495
static void set_value(AreaBuilder &parent, const attr::detail::outer_ring_from_iterator_pair< TIterator > &nodes)
Definition: attr.hpp:675
static void set_value(osmium::Changeset &changeset, attr::_created_at created_at) noexcept
Definition: attr.hpp:499
static void set_value(osmium::OSMObject &, const TDummy &) noexcept
Definition: attr.hpp:516
constexpr const char * role() const noexcept
Definition: attr.hpp:258
constexpr detail::nodes_from_iterator_pair< TIdIterator > _nodes(TIdIterator first, TIdIterator last)
Definition: attr.hpp:355
Definition: relation.hpp:54
static void set_value(osmium::OSMObject &object, attr::_timestamp timestamp) noexcept
Definition: attr.hpp:535
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
std::initializer_list< comment_type > comment_ilist
Definition: attr.hpp:426
constexpr _deleted(bool value=true) noexcept
Definition: attr.hpp:197
OSMIUM_ATTRIBUTE_ITER(tags_handler, tags_from_iterator_pair)
_tag(const pair_of_cstrings &value) noexcept
Definition: attr.hpp:314
Definition: timestamp.hpp:56
static void set_value(WayNodeListBuilder &, const TDummy &) noexcept
Definition: attr.hpp:612
constexpr detail::inner_ring_from_iterator_pair< TIdIterator > _inner_ring(TIdIterator first, TIdIterator last)
Definition: attr.hpp:453
NodeRefListBuilder< OuterRing > OuterRingBuilder
Definition: osm_object_builder.hpp:190
osmium::io::InputIterator< osmium::io::Reader > end(osmium::io::Reader &)
Definition: reader_iterator.hpp:45
constexpr detail::members_from_iterator_pair< TMemberIterator > _members(TMemberIterator first, TMemberIterator last)
Definition: attr.hpp:389
static void set_value(ChangesetDiscussionBuilder &builder, const attr::_comment &comment)
Definition: attr.hpp:653
constexpr _comment(const comment_type &value) noexcept
Definition: attr.hpp:410
constexpr _timestamp(const osmium::Timestamp &value) noexcept
Definition: attr.hpp:207
Definition: location.hpp:79
constexpr detail::outer_ring_from_iterator_pair< TIdIterator > _outer_ring(TIdIterator first, TIdIterator last)
Definition: attr.hpp:433
size_t add_way(osmium::memory::Buffer &buffer, const TArgs &...args)
Definition: attr.hpp:744
constexpr member_type(osmium::item_type type, osmium::object_id_type ref, const char *role="") noexcept
Definition: attr.hpp:244
static void set_value(osmium::OSMObject &object, attr::_cid changeset) noexcept
Definition: attr.hpp:539
static void set_value(osmium::Changeset &, const TDummy &) noexcept
Definition: attr.hpp:484
std::pair< const std::string &, const std::string & > pair_of_strings
Definition: attr.hpp:234
constexpr _member(const member_type &value) noexcept
Definition: attr.hpp:376
static void set_value(osmium::Changeset &changeset, attr::_closed_at closed_at) noexcept
Definition: attr.hpp:503
size_t add_way_node_list(osmium::memory::Buffer &buffer, const TArgs &...args)
Definition: attr.hpp:827
constexpr osmium::object_id_type ref() const noexcept
Definition: attr.hpp:254
void add_user(TBuilder &builder, const TArgs &...args)
Definition: attr.hpp:584
Definition: buffer.hpp:97
std::initializer_list< osmium::NodeRef > node_ref_ilist
Definition: attr.hpp:369
size_t add_relation(osmium::memory::Buffer &buffer, const TArgs &...args)
Definition: attr.hpp:764
constexpr const char * get_user(const attr::_user &user, const TArgs &...) noexcept
Definition: attr.hpp:569
constexpr detail::tags_from_iterator_pair< TTagIterator > _tags(TTagIterator first, TTagIterator last)
Definition: attr.hpp:331
static void set_value(osmium::Node &node, attr::_location location) noexcept
Definition: attr.hpp:553
ObjectBuilder< osmium::Changeset > ChangesetBuilder
Definition: osm_object_builder.hpp:401
uint32_t object_version_type
Type for OSM object version number.
Definition: types.hpp:47
static void set_value(osmium::Changeset &changeset, attr::_num_changes num_changes) noexcept
Definition: attr.hpp:491
osmium::object_id_type m_ref
Definition: attr.hpp:239
static void set_value(WayNodeListBuilder &builder, const attr::detail::nodes_from_iterator_pair< TIterator > &nodes)
Definition: attr.hpp:620
An OSM Changeset, a group of changes made by a single user over a short period of time...
Definition: changeset.hpp:154
std::initializer_list< osmium::object_id_type > object_id_ilist
Definition: attr.hpp:364
static void set_value(osmium::OSMObject &object, attr::_visible visible) noexcept
Definition: attr.hpp:527
const char * m_role
Definition: attr.hpp:240
OSMIUM_ATTRIBUTE_WITH_CONSTRUCTOR(object_handler, _id, osmium::object_id_type)
uint32_t num_changes_type
Type for changeset num_changes.
Definition: types.hpp:51
size_t add_changeset(osmium::memory::Buffer &buffer, const TArgs &...args)
Definition: attr.hpp:784
constexpr _visible(bool value=true) noexcept
Definition: attr.hpp:202
OSMObjectBuilder< osmium::Relation > RelationBuilder
Definition: osm_object_builder.hpp:357
std::pair< const char *const, const char *const > pair_of_cstrings
Definition: attr.hpp:233
uint32_t changeset_id_type
Type for OSM changeset IDs.
Definition: types.hpp:48
Definition: node_ref.hpp:50
osmium::io::InputIterator< osmium::io::Reader > begin(osmium::io::Reader &reader)
Definition: reader_iterator.hpp:41
#define OSMIUM_ATTRIBUTE_WITH_CONSTRUCTOR(_handler, _name, _type)
Definition: attr.hpp:175
uint32_t num_comments_type
Type for changeset num_comments.
Definition: types.hpp:52
static void set_value(osmium::OSMObject &object, attr::_id id) noexcept
Definition: attr.hpp:519
constexpr osmium::item_type type() const noexcept
Definition: attr.hpp:250
Definition: builder.hpp:57
Definition: object.hpp:58
uint32_t user_id_type
Type for OSM user IDs.
Definition: types.hpp:49
size_t commit()
Definition: buffer.hpp:335
static void set_value(RelationMemberListBuilder &builder, const attr::detail::members_from_iterator_pair< TIterator > &members)
Definition: attr.hpp:639
static void set_value(AreaBuilder &, const TDummy &) noexcept
Definition: attr.hpp:671