1 #ifndef OSMIUM_DYNAMIC_HANDLER_HPP
2 #define OSMIUM_DYNAMIC_HANDLER_HPP
48 class HandlerWrapperBase {
52 virtual ~HandlerWrapperBase() {
70 virtual void flush() {
80 #define OSMIUM_DYNAMIC_HANDLER_DISPATCH(_name_, _type_) \
81 template <typename THandler> \
82 auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, int) -> decltype(handler._name_(object), void()) { \
83 handler._name_(object); \
85 template <typename THandler> \
86 auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, long) -> decltype(handler(object), void()) { \
96 template <typename THandler>
97 auto flush_dispatch(THandler& handler,
int) -> decltype(handler.flush(),
void()) {
101 template <
typename THandler>
102 void flush_dispatch(THandler&,
long) {}
104 template <
typename THandler>
105 class HandlerWrapper :
public HandlerWrapperBase {
111 template <
typename... TArgs>
112 HandlerWrapper(TArgs&&... args) :
117 node_dispatch(m_handler, node, 0);
121 way_dispatch(m_handler, way, 0);
125 relation_dispatch(m_handler, relation, 0);
129 area_dispatch(m_handler, area, 0);
133 changeset_dispatch(m_handler, changeset, 0);
137 flush_dispatch(m_handler, 0);
146 using impl_ptr = std::unique_ptr<osmium::handler::detail::HandlerWrapperBase>;
155 template <
typename THandler,
typename... TArgs>
156 void set(TArgs&&... args) {
157 m_impl =
impl_ptr(
new osmium::handler::detail::HandlerWrapper<THandler>(std::forward<TArgs>(args)...));
169 m_impl->relation(relation);
177 m_impl->changeset(changeset);
190 #endif // OSMIUM_DYNAMIC_HANDLER_HPP
std::unique_ptr< osmium::handler::detail::HandlerWrapperBase > impl_ptr
Definition: dynamic_handler.hpp:146
void relation(const osmium::Relation &relation)
Definition: dynamic_handler.hpp:168
Definition: relation.hpp:165
void set(TArgs &&...args)
Definition: dynamic_handler.hpp:156
Definition: reader_iterator.hpp:39
Definition: handler.hpp:45
Definition: entity_bits.hpp:70
Definition: entity_bits.hpp:73
Definition: dynamic_handler.hpp:144
void changeset(const osmium::Changeset &changeset)
Definition: dynamic_handler.hpp:176
#define OSMIUM_DYNAMIC_HANDLER_DISPATCH(_name_, _type_)
Definition: dynamic_handler.hpp:80
Linestring has same direction as way.
void node(const osmium::Node &node)
Definition: dynamic_handler.hpp:160
Definition: entity_bits.hpp:67
Namespace for everything in the Osmium library.
Definition: assembler.hpp:66
void area(const osmium::Area &area)
Definition: dynamic_handler.hpp:172
impl_ptr m_impl
Definition: dynamic_handler.hpp:147
void flush()
Definition: dynamic_handler.hpp:180
Definition: entity_bits.hpp:66
DynamicHandler()
Definition: dynamic_handler.hpp:151
An OSM Changeset, a group of changes made by a single user over a short period of time...
Definition: changeset.hpp:154
Definition: entity_bits.hpp:68
void way(const osmium::Way &way)
Definition: dynamic_handler.hpp:164