1 #ifndef OSMIUM_BUILDER_ATTR_HPP 2 #define OSMIUM_BUILDER_ATTR_HPP 39 #include <initializer_list> 43 #include <type_traits> 68 template <
typename THandler,
typename... TTypes>
71 template <
typename THandler>
72 struct is_handled_by<THandler> {
73 static constexpr
bool value =
false;
76 template <
typename THandler,
typename T,
typename... TRest>
77 struct is_handled_by<THandler, T, TRest...> {
78 static constexpr
bool value = std::is_base_of<typename T::handler, THandler>::value ||
79 is_handled_by<THandler, TRest...>::value;
82 template <
typename THandler,
typename... TTypes>
83 struct are_all_handled_by;
85 template <
typename THandler,
typename T>
86 struct are_all_handled_by<THandler, T> {
87 static constexpr
bool value = std::is_base_of<typename T::handler, THandler>::value;
90 template <
typename THandler,
typename T,
typename... TRest>
91 struct are_all_handled_by<THandler, T, TRest...> {
92 static constexpr
bool value = std::is_base_of<typename T::handler, THandler>::value &&
93 are_all_handled_by<THandler, TRest...>::value;
97 template <
template<
typename>
class Predicate,
typename... Ts>
98 struct static_none_of : std::is_same<std::tuple<std::false_type, typename Predicate<Ts>::type...>,
99 std::tuple<typename Predicate<Ts>::type..., std::false_type>>
103 template <
template<
typename>
class Predicate,
typename... Ts>
104 struct static_all_of : std::is_same<std::tuple<std::true_type, typename Predicate<Ts>::type...>,
105 std::tuple<typename Predicate<Ts>::type..., std::true_type>>
109 template <
typename THandler,
typename... TTypes>
110 struct is_handled_by {
111 template <
typename T>
112 using HasHandler = std::is_base_of<typename T::handler, THandler>;
114 static constexpr
bool value = !static_none_of<HasHandler, TTypes...>::value;
118 template <
typename THandler,
typename... TTypes>
119 struct are_all_handled_by {
120 template <
typename T>
121 using HasHandler = std::is_base_of<typename T::handler, THandler>;
123 static constexpr
bool value = static_all_of<HasHandler, TTypes...>::value;
129 template <
typename TType>
130 struct type_wrapper {
136 constexpr
explicit type_wrapper(
const TType& v) :
143 template <
typename TType>
144 struct iterator_wrapper {
151 constexpr iterator_wrapper(TType
begin, TType
end) :
155 constexpr TType
begin()
const {
159 constexpr TType
end()
const {
166 struct entity_handler {};
167 struct object_handler;
170 struct nodes_handler;
171 struct members_handler;
172 struct changeset_handler;
173 struct discussion_handler;
178 #define OSMIUM_ATTRIBUTE(_handler, _name, _type) \ 179 struct _name : public osmium::builder::detail::type_wrapper<_type> { \ 180 using handler = osmium::builder::detail::_handler; 182 #define OSMIUM_ATTRIBUTE_WITH_CONSTRUCTOR(_handler, _name, _type) \ 183 OSMIUM_ATTRIBUTE(_handler, _name, _type) \ 184 constexpr explicit _name(std::add_const<_type>::type& value) : \ 185 type_wrapper(value) {} \ 188 #define OSMIUM_ATTRIBUTE_ITER(_handler, _name) \ 189 template <typename TIterator> \ 190 struct _name : public osmium::builder::detail::iterator_wrapper<TIterator> { \ 191 using handler = osmium::builder::detail::_handler; \ 192 constexpr _name(TIterator first, TIterator last) : \ 193 osmium::builder::detail::iterator_wrapper<TIterator>(first, last) {} \ 204 constexpr explicit
_deleted(
bool value = true) noexcept :
205 type_wrapper(value) {}
209 constexpr explicit
_visible(
bool value = true) noexcept :
210 type_wrapper(value) {}
215 type_wrapper(value) {}
228 type_wrapper(value) {}
230 type_wrapper(
osmium::Location{lat, lon}) {}
234 constexpr explicit
_user(const
char* val) noexcept :
236 explicit _user(
const std::string& val) noexcept :
237 type_wrapper(val.c_str()) {}
265 constexpr
const char*
role() const noexcept {
282 m_role(
std::move(role)) {
293 const char*
role() const noexcept {
294 return m_role.c_str();
323 constexpr
const char*
user() const noexcept {
327 constexpr
const char*
text() const noexcept {
350 type_wrapper(value) {}
351 explicit _tag(
const std::pair<const char* const, const char*>& value) :
353 explicit _tag(
const std::pair<const char*, const char* const>& value) :
355 explicit _tag(
const std::pair<const char*, const char*>& value) :
358 type_wrapper(
std::make_pair(value.first.c_str(), value.second.c_str())) {}
359 explicit _tag(
const char* key,
const char* val) :
360 type_wrapper(
std::make_pair(key, val)) {}
361 explicit _tag(
const std::string& key,
const std::string& val) :
362 type_wrapper(
std::make_pair(key.c_str(), val.c_str())) {}
365 template <
typename TTagIterator>
366 inline constexpr detail::tags_from_iterator_pair<TTagIterator>
_tags(TTagIterator first, TTagIterator last) {
367 return detail::tags_from_iterator_pair<TTagIterator>(first, last);
370 template <
typename TContainer>
371 inline detail::tags_from_iterator_pair<typename TContainer::const_iterator>
_tags(
const TContainer& container) {
372 return detail::tags_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
375 using tag_ilist = std::initializer_list<std::pair<const char*, const char*>>;
376 inline detail::tags_from_iterator_pair<tag_ilist::const_iterator>
_tags(
const tag_ilist& container) {
377 return detail::tags_from_iterator_pair<tag_ilist::const_iterator>(
std::begin(container),
std::end(container));
384 type_wrapper(NodeRef{value}) {}
385 constexpr
explicit _node(
const NodeRef& value) noexcept :
386 type_wrapper(value) {}
389 template <
typename TIdIterator>
390 inline constexpr detail::nodes_from_iterator_pair<TIdIterator>
_nodes(TIdIterator first, TIdIterator last) {
391 return detail::nodes_from_iterator_pair<TIdIterator>(first, last);
394 template <
typename TContainer>
395 inline detail::nodes_from_iterator_pair<typename TContainer::const_iterator>
_nodes(
const TContainer& container) {
396 return detail::nodes_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
401 return detail::nodes_from_iterator_pair<object_id_ilist::const_iterator>(
std::begin(container),
std::end(container));
405 inline detail::nodes_from_iterator_pair<node_ref_ilist::const_iterator>
_nodes(
const node_ref_ilist& container) {
406 return detail::nodes_from_iterator_pair<node_ref_ilist::const_iterator>(
std::begin(container),
std::end(container));
412 type_wrapper(value) {}
414 type_wrapper({
type,
id}) {}
416 type_wrapper({
type, id, role}) {}
418 type_wrapper({
type, id, role.c_str()}) {}
420 type_wrapper({member.type(), member.ref(), member.role()}) {}
423 template <
typename TMemberIterator>
424 inline constexpr detail::members_from_iterator_pair<TMemberIterator>
_members(TMemberIterator first, TMemberIterator last) {
425 return detail::members_from_iterator_pair<TMemberIterator>(first, last);
428 template <
typename TContainer>
429 inline detail::members_from_iterator_pair<typename TContainer::const_iterator>
_members(
const TContainer& container) {
430 return detail::members_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
434 inline detail::members_from_iterator_pair<member_ilist::const_iterator>
_members(
const member_ilist& container) {
435 return detail::members_from_iterator_pair<member_ilist::const_iterator>(
std::begin(container),
std::end(container));
446 type_wrapper(value) {}
448 type_wrapper({comment.date(), comment.uid(), comment.user(), comment.text()}) {}
451 template <
typename TCommentIterator>
452 inline constexpr detail::comments_from_iterator_pair<TCommentIterator>
_comments(TCommentIterator first, TCommentIterator last) {
453 return detail::comments_from_iterator_pair<TCommentIterator>(first, last);
456 template <
typename TContainer>
457 inline detail::comments_from_iterator_pair<typename TContainer::const_iterator>
_comments(
const TContainer& container) {
458 return detail::comments_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
463 return detail::comments_from_iterator_pair<comment_ilist::const_iterator>(
std::begin(container),
std::end(container));
467 template <
typename TIdIterator>
468 inline constexpr detail::outer_ring_from_iterator_pair<TIdIterator>
_outer_ring(TIdIterator first, TIdIterator last) {
469 return detail::outer_ring_from_iterator_pair<TIdIterator>(first, last);
472 template <
typename TContainer>
473 inline detail::outer_ring_from_iterator_pair<typename TContainer::const_iterator>
_outer_ring(
const TContainer& container) {
474 return detail::outer_ring_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
478 inline detail::outer_ring_from_iterator_pair<object_id_ilist::const_iterator>
_outer_ring(
const object_id_ilist& container) {
479 return detail::outer_ring_from_iterator_pair<object_id_ilist::const_iterator>(
std::begin(container),
std::end(container));
483 inline detail::outer_ring_from_iterator_pair<node_ref_ilist::const_iterator>
_outer_ring(
const node_ref_ilist& container) {
484 return detail::outer_ring_from_iterator_pair<node_ref_ilist::const_iterator>(
std::begin(container),
std::end(container));
487 template <
typename TIdIterator>
488 inline constexpr detail::inner_ring_from_iterator_pair<TIdIterator>
_inner_ring(TIdIterator first, TIdIterator last) {
489 return detail::inner_ring_from_iterator_pair<TIdIterator>(first, last);
492 template <
typename TContainer>
493 inline detail::inner_ring_from_iterator_pair<typename TContainer::const_iterator>
_inner_ring(
const TContainer& container) {
494 return detail::inner_ring_from_iterator_pair<typename TContainer::const_iterator>(
std::begin(container),
std::end(container));
497 using object_id_ilist = std::initializer_list<osmium::object_id_type>;
498 inline detail::inner_ring_from_iterator_pair<object_id_ilist::const_iterator>
_inner_ring(
const object_id_ilist& container) {
499 return detail::inner_ring_from_iterator_pair<object_id_ilist::const_iterator>(
std::begin(container),
std::end(container));
502 using node_ref_ilist = std::initializer_list<osmium::NodeRef>;
503 inline detail::inner_ring_from_iterator_pair<node_ref_ilist::const_iterator>
_inner_ring(
const node_ref_ilist& container) {
504 return detail::inner_ring_from_iterator_pair<node_ref_ilist::const_iterator>(
std::begin(container),
std::end(container));
510 #undef OSMIUM_ATTRIBUTE_ITER 511 #undef OSMIUM_ATTRIBUTE_WITH_CONSTRUCTOR 512 #undef OSMIUM_ATTRIBUTE 518 template <
typename TDummy>
523 changeset.set_id(
id.value);
527 changeset.set_num_changes(num_changes.value);
531 changeset.set_num_comments(num_comments.value);
535 changeset.set_created_at(created_at.value);
539 changeset.set_closed_at(closed_at.value);
543 changeset.set_uid(uid.value);
550 template <
typename TDummy>
555 object.set_id(
id.value);
559 object.set_version(version.value);
563 object.set_visible(visible.value);
567 object.set_deleted(deleted.value);
571 object.set_timestamp(timestamp.value);
575 object.set_changeset(changeset.value);
579 object.set_uid(uid.value);
586 using object_handler::set_value;
589 node.set_location(location.value);
594 template <
typename THandler,
typename TBuilder,
typename... TArgs>
595 inline void add_basic(TBuilder& builder,
const TArgs&... args) noexcept {
596 (void)std::initializer_list<int>{
597 (THandler::set_value(builder.object(), args), 0)...
603 template <
typename... TArgs>
612 template <
typename TFirst,
typename... TRest>
613 inline constexpr
typename std::enable_if<!std::is_same<attr::_user, TFirst>::value,
const char*>
::type 614 get_user(
const TFirst&,
const TRest&... args) noexcept {
618 template <
typename TBuilder,
typename... TArgs>
619 inline void add_user(TBuilder& builder,
const TArgs&... args) {
620 builder.set_user(
get_user(args...));
627 template <
typename TDummy>
628 static void set_value(TagListBuilder&,
const TDummy&) noexcept {
632 builder.add_tag(tag.value);
635 template <
typename TIterator>
636 static void set_value(TagListBuilder& builder,
const attr::detail::tags_from_iterator_pair<TIterator>& tags) {
637 for (
const auto& tag : tags) {
638 builder.add_tag(tag);
646 template <
typename TDummy>
651 builder.add_node_ref(node_ref.value);
654 template <
typename TIterator>
656 for (
const auto& ref : nodes) {
657 builder.add_node_ref(ref);
665 template <
typename TDummy>
666 static void set_value(RelationMemberListBuilder&,
const TDummy&) noexcept {
670 builder.add_member(member.value.type(), member.value.ref(), member.value.role());
673 template <
typename TIterator>
674 static void set_value(RelationMemberListBuilder& builder,
const attr::detail::members_from_iterator_pair<TIterator>& members) {
675 for (
const auto& member : members) {
676 builder.add_member(member.type(), member.ref(), member.role());
684 template <
typename TDummy>
685 static void set_value(ChangesetDiscussionBuilder&,
const TDummy&) noexcept {
689 builder.add_comment(comment.value.date(), comment.value.uid(), comment.value.user());
690 builder.add_comment_text(comment.value.text());
693 template <
typename TIterator>
694 static void set_value(ChangesetDiscussionBuilder& builder,
const attr::detail::comments_from_iterator_pair<TIterator>& comments) {
695 for (
const auto& comment : comments) {
696 builder.add_comment(comment.date(), comment.uid(), comment.user());
697 builder.add_comment_text(comment.text());
705 template <
typename TDummy>
706 static void set_value(AreaBuilder&,
const TDummy&) noexcept {
709 template <
typename TIterator>
710 static void set_value(AreaBuilder& parent,
const attr::detail::outer_ring_from_iterator_pair<TIterator>& nodes) {
712 for (
const auto& ref : nodes) {
713 builder.add_node_ref(ref);
717 template <
typename TIterator>
718 static void set_value(AreaBuilder& parent,
const attr::detail::inner_ring_from_iterator_pair<TIterator>& nodes) {
720 for (
const auto& ref : nodes) {
721 builder.add_node_ref(ref);
729 template <
typename TBuilder,
typename THandler,
typename... TArgs>
730 inline typename std::enable_if<!is_handled_by<THandler, TArgs...>::value>
::type 734 template <
typename TBuilder,
typename THandler,
typename... TArgs>
735 inline typename std::enable_if<is_handled_by<THandler, TArgs...>::value>
::type 737 TBuilder builder(parent.
buffer(), &parent);
738 (void)std::initializer_list<int>{
739 (THandler::set_value(builder, args), 0)...
759 template <
typename... TArgs>
763 NodeBuilder builder(buffer);
765 detail::add_basic<detail::node_handler>(builder, args...);
767 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
780 template <
typename... TArgs>
784 WayBuilder builder(buffer);
786 detail::add_basic<detail::object_handler>(builder, args...);
788 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
789 detail::add_list<WayNodeListBuilder, detail::nodes_handler>(builder, args...);
802 template <
typename... TArgs>
806 RelationBuilder builder(buffer);
808 detail::add_basic<detail::object_handler>(builder, args...);
810 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
811 detail::add_list<RelationMemberListBuilder, detail::members_handler>(builder, args...);
824 template <
typename... TArgs>
828 ChangesetBuilder builder(buffer);
830 detail::add_basic<detail::changeset_handler>(builder, args...);
832 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
833 detail::add_list<ChangesetDiscussionBuilder, detail::discussion_handler>(builder, args...);
846 template <
typename... TArgs>
850 AreaBuilder builder(buffer);
852 detail::add_basic<detail::object_handler>(builder, args...);
854 detail::add_list<TagListBuilder, detail::tags_handler>(builder, args...);
856 (void)std::initializer_list<int>{
871 template <
typename... TArgs>
876 (void)std::initializer_list<int>{
891 template <
typename... TArgs>
895 TagListBuilder builder(buffer);
896 (void)std::initializer_list<int>{
908 #endif // OSMIUM_BUILDER_ATTR_HPP static void set_value(osmium::Changeset &changeset, attr::_cid id) noexcept
Definition: attr.hpp:522
uint32_t object_version_type
Type for OSM object version number.
Definition: types.hpp:47
uint32_t user_id_type
Type for OSM user IDs.
Definition: types.hpp:49
static void set_value(ChangesetDiscussionBuilder &builder, const attr::detail::comments_from_iterator_pair< TIterator > &comments)
Definition: attr.hpp:694
size_t add_way(osmium::memory::Buffer &buffer, const TArgs &... args)
Definition: attr.hpp:781
static void set_value(AreaBuilder &parent, const attr::detail::inner_ring_from_iterator_pair< TIterator > &nodes)
Definition: attr.hpp:718
constexpr _node(osmium::object_id_type value) noexcept
Definition: attr.hpp:383
osmium::memory::Buffer & buffer() noexcept
Return the buffer this builder is using.
Definition: builder.hpp:193
static void set_value(RelationMemberListBuilder &builder, const attr::_member &member)
Definition: attr.hpp:669
static void set_value(WayNodeListBuilder &builder, const attr::_node &node_ref)
Definition: attr.hpp:650
static void set_value(osmium::OSMObject &object, attr::_uid uid) noexcept
Definition: attr.hpp:578
osmium::item_type m_type
Definition: attr.hpp:273
type
Definition: entity_bits.hpp:63
size_t add_changeset(osmium::memory::Buffer &buffer, const TArgs &... args)
Definition: attr.hpp:825
std::initializer_list< member_type > member_ilist
Definition: attr.hpp:433
constexpr _location(const osmium::Location &value) noexcept
Definition: attr.hpp:227
NodeRefListBuilder< InnerRing > InnerRingBuilder
Definition: osm_object_builder.hpp:211
static void set_value(osmium::OSMObject &object, attr::_version version) noexcept
Definition: attr.hpp:558
osmium::item_type m_type
Definition: attr.hpp:245
#define OSMIUM_ATTRIBUTE(_handler, _name, _type)
Definition: attr.hpp:178
NodeRefListBuilder< WayNodeList > WayNodeListBuilder
Definition: osm_object_builder.hpp:209
constexpr detail::comments_from_iterator_pair< TCommentIterator > _comments(TCommentIterator first, TCommentIterator last)
Definition: attr.hpp:452
item_type
Definition: item_type.hpp:43
static void set_value(RelationMemberListBuilder &, const TDummy &) noexcept
Definition: attr.hpp:666
size_t add_node(osmium::memory::Buffer &buffer, const TArgs &... args)
Definition: attr.hpp:760
constexpr _user(const char *val) noexcept
Definition: attr.hpp:234
_timestamp(const std::string &value)
Definition: attr.hpp:222
Definition: reader_iterator.hpp:39
uint32_t num_changes_type
Type for changeset num_changes.
Definition: types.hpp:51
static void set_value(osmium::OSMObject &object, attr::_deleted deleted) noexcept
Definition: attr.hpp:566
size_t add_way_node_list(osmium::memory::Buffer &buffer, const TArgs &... args)
Definition: attr.hpp:872
size_t add_tag_list(osmium::memory::Buffer &buffer, const TArgs &... args)
Definition: attr.hpp:892
static void set_value(ChangesetDiscussionBuilder &, const TDummy &) noexcept
Definition: attr.hpp:685
const char * role() const noexcept
Definition: attr.hpp:293
static void set_value(osmium::Changeset &changeset, attr::_uid uid) noexcept
Definition: attr.hpp:542
static void set_value(osmium::Changeset &changeset, attr::_num_comments num_comments) noexcept
Definition: attr.hpp:530
void add_basic(TBuilder &builder, const TArgs &... args) noexcept
Definition: attr.hpp:595
std::string m_role
Definition: attr.hpp:275
static void set_value(AreaBuilder &parent, const attr::detail::outer_ring_from_iterator_pair< TIterator > &nodes)
Definition: attr.hpp:710
static void set_value(osmium::Changeset &changeset, attr::_created_at created_at) noexcept
Definition: attr.hpp:534
osmium::object_id_type m_ref
Definition: attr.hpp:274
static void set_value(osmium::OSMObject &, const TDummy &) noexcept
Definition: attr.hpp:551
constexpr const char * role() const noexcept
Definition: attr.hpp:265
constexpr detail::nodes_from_iterator_pair< TIdIterator > _nodes(TIdIterator first, TIdIterator last)
Definition: attr.hpp:390
Definition: relation.hpp:57
static void set_value(osmium::OSMObject &object, attr::_timestamp timestamp) noexcept
Definition: attr.hpp:570
Namespace for everything in the Osmium library.
Definition: assembler.hpp:73
std::initializer_list< comment_type > comment_ilist
Definition: attr.hpp:461
constexpr _deleted(bool value=true) noexcept
Definition: attr.hpp:204
uint32_t num_comments_type
Type for changeset num_comments.
Definition: types.hpp:52
_tag(const pair_of_cstrings &value) noexcept
Definition: attr.hpp:349
Definition: timestamp.hpp:115
static void set_value(WayNodeListBuilder &, const TDummy &) noexcept
Definition: attr.hpp:647
constexpr detail::inner_ring_from_iterator_pair< TIdIterator > _inner_ring(TIdIterator first, TIdIterator last)
Definition: attr.hpp:488
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:424
osmium::object_id_type ref() const noexcept
Definition: attr.hpp:289
uint32_t changeset_id_type
Type for OSM changeset IDs.
Definition: types.hpp:48
int64_t object_id_type
Type for OSM object (node, way, or relation) IDs.
Definition: types.hpp:45
std::initializer_list< std::pair< const char *, const char * > > tag_ilist
Definition: attr.hpp:375
static void set_value(ChangesetDiscussionBuilder &builder, const attr::_comment &comment)
Definition: attr.hpp:688
constexpr _comment(const comment_type &value) noexcept
Definition: attr.hpp:445
member_type_string(osmium::item_type type, osmium::object_id_type ref, std::string &&role)
Definition: attr.hpp:279
void add_user(TBuilder &builder, const TArgs &... args)
Definition: attr.hpp:619
constexpr _timestamp(const osmium::Timestamp &value) noexcept
Definition: attr.hpp:214
Definition: location.hpp:266
constexpr detail::outer_ring_from_iterator_pair< TIdIterator > _outer_ring(TIdIterator first, TIdIterator last)
Definition: attr.hpp:468
constexpr member_type(osmium::item_type type, osmium::object_id_type ref, const char *role="") noexcept
Definition: attr.hpp:251
static void set_value(osmium::OSMObject &object, attr::_cid changeset) noexcept
Definition: attr.hpp:574
static void set_value(osmium::Changeset &, const TDummy &) noexcept
Definition: attr.hpp:519
std::pair< const std::string &, const std::string & > pair_of_strings
Definition: attr.hpp:241
constexpr _member(const member_type &value) noexcept
Definition: attr.hpp:411
static void set_value(osmium::Changeset &changeset, attr::_closed_at closed_at) noexcept
Definition: attr.hpp:538
#define OSMIUM_ATTRIBUTE_ITER(_handler, _name)
Definition: attr.hpp:188
constexpr osmium::object_id_type ref() const noexcept
Definition: attr.hpp:261
Definition: buffer.hpp:97
std::initializer_list< osmium::NodeRef > node_ref_ilist
Definition: attr.hpp:404
constexpr detail::tags_from_iterator_pair< TTagIterator > _tags(TTagIterator first, TTagIterator last)
Definition: attr.hpp:366
static void set_value(osmium::Node &node, attr::_location location) noexcept
Definition: attr.hpp:588
NodeRefListBuilder< OuterRing > OuterRingBuilder
Definition: osm_object_builder.hpp:210
static void set_value(osmium::Changeset &changeset, attr::_num_changes num_changes) noexcept
Definition: attr.hpp:526
osmium::object_id_type m_ref
Definition: attr.hpp:246
static void set_value(WayNodeListBuilder &builder, const attr::detail::nodes_from_iterator_pair< TIterator > &nodes)
Definition: attr.hpp:655
An OSM Changeset, a group of changes made by a single user over a short period of time...
Definition: changeset.hpp:148
std::initializer_list< osmium::object_id_type > object_id_ilist
Definition: attr.hpp:399
static void set_value(osmium::OSMObject &object, attr::_visible visible) noexcept
Definition: attr.hpp:562
const char * m_role
Definition: attr.hpp:247
constexpr _visible(bool value=true) noexcept
Definition: attr.hpp:209
std::pair< const char *const, const char *const > pair_of_cstrings
Definition: attr.hpp:240
Definition: node_ref.hpp:50
osmium::io::InputIterator< osmium::io::Reader > begin(osmium::io::Reader &reader)
Definition: reader_iterator.hpp:41
size_t add_area(osmium::memory::Buffer &buffer, const TArgs &... args)
Definition: attr.hpp:847
std::enable_if< is_handled_by< THandler, TArgs... >::value >::type add_list(osmium::builder::Builder &parent, const TArgs &... args)
Definition: attr.hpp:736
#define OSMIUM_ATTRIBUTE_WITH_CONSTRUCTOR(_handler, _name, _type)
Definition: attr.hpp:182
static void set_value(osmium::OSMObject &object, attr::_id id) noexcept
Definition: attr.hpp:554
osmium::item_type type() const noexcept
Definition: attr.hpp:285
constexpr osmium::item_type type() const noexcept
Definition: attr.hpp:257
Definition: builder.hpp:61
size_t add_relation(osmium::memory::Buffer &buffer, const TArgs &... args)
Definition: attr.hpp:803
constexpr std::enable_if<!std::is_same< attr::_user, TFirst >::value, const char * >::type get_user(const TFirst &, const TRest &... args) noexcept
Definition: attr.hpp:614
Definition: object.hpp:64
size_t commit()
Definition: buffer.hpp:354
static void set_value(RelationMemberListBuilder &builder, const attr::detail::members_from_iterator_pair< TIterator > &members)
Definition: attr.hpp:674
static void set_value(AreaBuilder &, const TDummy &) noexcept
Definition: attr.hpp:706