1 #ifndef OSMIUM_RELATIONS_RELATIONS_MANAGER_HPP 2 #define OSMIUM_RELATIONS_RELATIONS_MANAGER_HPP 42 #include <type_traits> 95 m_relations_db(m_stash),
96 m_member_nodes_db(m_stash, m_relations_db),
97 m_member_ways_db(m_stash, m_relations_db),
98 m_member_relations_db(m_stash, m_relations_db),
154 throw std::logic_error{
"Should not be here."};
174 throw std::logic_error{
"Should not be here."};
184 if (member.ref() == 0) {
278 return m_output.
read();
302 template <
typename TManager,
bool TNodes,
bool TWays,
bool TRelations,
bool TCheckOrder = true>
444 return *
static_cast<TManager*
>(
this);
448 derived().complete_relation(*rel_handle);
451 for (
const auto& member : rel_handle->
members()) {
452 if (member.ref() != 0) {
464 m_check_order_handler(),
465 m_handler_pass2(*this) {
473 return m_handler_pass2;
487 if (derived().new_relation(relation)) {
491 for (
auto& member : rel_handle->members()) {
492 if (wanted_type(member.type()) &&
493 derived().new_member(relation, member, n)) {
505 m_check_order_handler.node(node);
506 derived().before_node(node);
508 handle_complete_relation(rel_handle);
511 derived().node_not_in_any_relation(node);
513 derived().after_node(node);
520 m_check_order_handler.way(way);
521 derived().before_way(way);
523 handle_complete_relation(rel_handle);
526 derived().way_not_in_any_relation(way);
528 derived().after_way(way);
535 m_check_order_handler.relation(relation);
536 derived().before_relation(relation);
538 handle_complete_relation(rel_handle);
541 derived().relation_not_in_any_relation(relation);
543 derived().after_relation(relation);
556 template <
typename TFunc>
567 #endif // OSMIUM_RELATIONS_RELATIONS_MANAGER_HPP void remove()
Definition: relations_database.hpp:274
std::size_t used_memory() const noexcept
Definition: members_database.hpp:186
void handle_node(const osmium::Node &node)
Definition: relations_manager.hpp:503
void set_callback(const callback_func_type &callback=nullptr) noexcept
Definition: callback_buffer.hpp:139
type
Definition: entity_bits.hpp:63
osmium::memory::Buffer read()
Return the contents of the output buffer.
Definition: relations_manager.hpp:277
void flush_output()
Flush the output buffer.
Definition: relations_manager.hpp:267
void way(const osmium::Way &) const noexcept
Definition: handler.hpp:81
RelationMemberList & members()
Get a reference to the member list.
Definition: relation.hpp:186
relations_manager_memory_usage used_memory() const noexcept
Definition: relations_manager.hpp:246
Definition: relations_manager.hpp:74
void node(const osmium::Node &) const noexcept
Definition: handler.hpp:78
osmium::memory::Buffer & buffer() noexcept
Access the output buffer.
Definition: relations_manager.hpp:257
void for_each_relation(TFunc &&func)
Definition: relations_database.hpp:323
const TObject * get(osmium::object_id_type id) const
Definition: members_database.hpp:394
bool add(const TObject &object, TFunc &&func)
Definition: members_database.hpp:357
item_type
Definition: item_type.hpp:43
Definition: relation.hpp:168
relations::MembersDatabase< osmium::Relation > m_member_relations_db
Definition: relations_manager.hpp:86
void handle_way(const osmium::Way &way)
Definition: relations_manager.hpp:518
osmium::memory::Buffer & buffer() noexcept
Definition: callback_buffer.hpp:128
Definition: handler.hpp:71
relations::MembersDatabase< osmium::Way > m_member_ways_db
Definition: relations_manager.hpp:85
std::size_t used_memory() const noexcept
Definition: item_stash.hpp:198
void possibly_flush()
Definition: callback_buffer.hpp:165
bool new_member(const osmium::Relation &, const osmium::RelationMember &, std::size_t) const noexcept
Definition: relations_manager.hpp:340
SecondPassHandler< RelationsManager > m_handler_pass2
Definition: relations_manager.hpp:309
void node_not_in_any_relation(const osmium::Node &) const noexcept
Definition: relations_manager.hpp:370
std::size_t used_memory() const noexcept
Definition: relations_database.hpp:144
TManager & derived() noexcept
Definition: relations_manager.hpp:443
Definition: manager_util.hpp:64
void before_way(const osmium::Way &) const noexcept
Definition: relations_manager.hpp:390
const osmium::Relation * get_member_relation(osmium::object_id_type id) const noexcept
Definition: relations_manager.hpp:225
SecondPassHandler< RelationsManager > & handler(const std::function< void(osmium::memory::Buffer &&)> &callback=nullptr)
Definition: relations_manager.hpp:471
Definition: item_stash.hpp:57
void way_not_in_any_relation(const osmium::Way &) const noexcept
Definition: relations_manager.hpp:400
const osmium::relations::MembersDatabase< osmium::Way > & member_ways_database() const noexcept
Access the internal database containing member ways.
Definition: relations_manager.hpp:123
typename std::conditional< true, osmium::handler::CheckOrder, osmium::handler::Handler >::type check_order_handler
Definition: relations_manager.hpp:305
osmium::ItemStash m_stash
Definition: relations_manager.hpp:78
Definition: relation.hpp:57
osmium::relations::MembersDatabase< osmium::Relation > & member_relations_database() noexcept
Access the internal database containing member relations.
Definition: relations_manager.hpp:128
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
void relation(const osmium::Relation &relation)
Definition: relations_manager.hpp:486
osmium::memory::Buffer read()
Definition: callback_buffer.hpp:176
RelationsManagerBase()
Definition: relations_manager.hpp:93
bool new_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:326
void handle_complete_relation(RelationHandle &rel_handle)
Definition: relations_manager.hpp:447
void after_way(const osmium::Way &) const noexcept
Definition: relations_manager.hpp:410
osmium::relations::MembersDatabase< osmium::Node > & member_nodes_database() noexcept
Access the internal database containing member nodes.
Definition: relations_manager.hpp:108
int64_t object_id_type
Type for OSM object (node, way, or relation) IDs.
Definition: types.hpp:45
void possibly_flush()
Flush the output buffer if it is full.
Definition: relations_manager.hpp:272
relations::MembersDatabaseCommon & member_database(osmium::item_type type)
Definition: relations_manager.hpp:143
const osmium::relations::MembersDatabase< osmium::Node > & member_nodes_database() const noexcept
Access the internal database containing member nodes.
Definition: relations_manager.hpp:113
Definition: manager_util.hpp:164
Definition: relations_database.hpp:208
const osmium::Way * get_member_way(osmium::object_id_type id) const noexcept
Definition: relations_manager.hpp:211
void prepare_for_lookup()
Definition: relations_manager.hpp:237
osmium::relations::RelationsDatabase & relations_database() noexcept
Access the internal RelationsDatabase.
Definition: relations_manager.hpp:103
Definition: relations_database.hpp:82
object_id_type id() const noexcept
Get ID of this object.
Definition: object.hpp:126
const relations::MembersDatabaseCommon & member_database(osmium::item_type type) const
Definition: relations_manager.hpp:163
void relation(const osmium::Relation &) const noexcept
Definition: handler.hpp:84
void flush()
Definition: callback_buffer.hpp:151
Definition: buffer.hpp:98
RelationHandle add(const osmium::Relation &relation)
Definition: relations_database.hpp:317
void before_node(const osmium::Node &) const noexcept
Definition: relations_manager.hpp:360
osmium::memory::CallbackBuffer m_output
Output buffer.
Definition: relations_manager.hpp:89
relations::MembersDatabase< osmium::Node > m_member_nodes_db
Databases of all members we are interested in.
Definition: relations_manager.hpp:84
const osmium::Node * get_member_node(osmium::object_id_type id) const noexcept
Definition: relations_manager.hpp:197
relations::RelationsDatabase m_relations_db
Database of all relations we are interested in.
Definition: relations_manager.hpp:81
RelationsManager()
Definition: relations_manager.hpp:462
static bool wanted_type(osmium::item_type type) noexcept
Definition: relations_manager.hpp:311
const osmium::OSMObject * get_member_object(const osmium::RelationMember &member) const noexcept
Definition: relations_manager.hpp:183
Definition: members_database.hpp:62
void after_node(const osmium::Node &) const noexcept
Definition: relations_manager.hpp:380
Definition: callback_buffer.hpp:70
Definition: relations_manager.hpp:303
void before_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:420
check_order_handler m_check_order_handler
Definition: relations_manager.hpp:307
const osmium::relations::MembersDatabase< osmium::Relation > & member_relations_database() const noexcept
Access the internal database containing member relations.
Definition: relations_manager.hpp:133
void prepare_for_lookup()
Definition: members_database.hpp:258
void handle_relation(const osmium::Relation &relation)
Definition: relations_manager.hpp:533
void relation_not_in_any_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:430
void for_each_incomplete_relation(TFunc &&func)
Definition: relations_manager.hpp:557
void after_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:440
void complete_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:350
void set_callback(const std::function< void(osmium::memory::Buffer &&)> &callback)
Set the callback called when the output buffer is full.
Definition: relations_manager.hpp:262
osmium::relations::MembersDatabase< osmium::Way > & member_ways_database() noexcept
Access the internal database containing member ways.
Definition: relations_manager.hpp:118
Definition: object.hpp:64