1 #ifndef OSMIUM_DYNAMIC_HANDLER_HPP 2 #define OSMIUM_DYNAMIC_HANDLER_HPP 53 class HandlerWrapperBase {
57 virtual ~HandlerWrapperBase() =
default;
74 virtual void flush() {
84 #define OSMIUM_DYNAMIC_HANDLER_DISPATCH(_name_, _type_) \ 85 template <typename THandler> \ 86 auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, int) -> decltype(handler._name_(object), void()) { \ 87 handler._name_(object); \ 89 template <typename THandler> \ 90 auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, long) -> decltype(handler(object), void()) { \ 100 template <
typename THandler>
101 auto flush_dispatch(THandler& handler,
int) -> decltype(handler.flush(), void()) {
105 template <
typename THandler>
106 void flush_dispatch(THandler&,
long) {
109 template <
typename THandler>
110 class HandlerWrapper :
public HandlerWrapperBase {
116 template <
typename... TArgs>
117 explicit HandlerWrapper(TArgs&&... args) :
118 m_handler(std::forward<TArgs>(args)...) {
122 node_dispatch(m_handler, node, 0);
126 way_dispatch(m_handler, way, 0);
130 relation_dispatch(m_handler, relation, 0);
134 area_dispatch(m_handler, area, 0);
138 changeset_dispatch(m_handler, changeset, 0);
142 flush_dispatch(m_handler, 0);
151 using impl_ptr = std::unique_ptr<osmium::handler::detail::HandlerWrapperBase>;
157 m_impl(new
osmium::handler::
detail::HandlerWrapperBase) {
160 template <
typename THandler,
typename... TArgs>
161 void set(TArgs&&... args) {
162 m_impl.reset(
new osmium::handler::detail::HandlerWrapper<THandler>{std::forward<TArgs>(args)...});
174 m_impl->relation(relation);
182 m_impl->changeset(changeset);
195 #endif // OSMIUM_DYNAMIC_HANDLER_HPP std::unique_ptr< osmium::handler::detail::HandlerWrapperBase > impl_ptr
Definition: dynamic_handler.hpp:151
void relation(const osmium::Relation &relation)
Definition: dynamic_handler.hpp:173
Definition: relation.hpp:168
Definition: handler.hpp:71
Definition: dynamic_handler.hpp:149
void changeset(const osmium::Changeset &changeset)
Definition: dynamic_handler.hpp:181
#define OSMIUM_DYNAMIC_HANDLER_DISPATCH(_name_, _type_)
Definition: dynamic_handler.hpp:84
void node(const osmium::Node &node)
Definition: dynamic_handler.hpp:165
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
void area(const osmium::Area &area)
Definition: dynamic_handler.hpp:177
impl_ptr m_impl
Definition: dynamic_handler.hpp:152
void flush()
Definition: dynamic_handler.hpp:185
DynamicHandler()
Definition: dynamic_handler.hpp:156
An OSM Changeset, a group of changes made by a single user over a short period of time...
Definition: changeset.hpp:148
void way(const osmium::Way &way)
Definition: dynamic_handler.hpp:169