1 #ifndef OSMIUM_RELATIONS_RELATIONS_MANAGER_HPP 2 #define OSMIUM_RELATIONS_RELATIONS_MANAGER_HPP 57 #include <type_traits> 95 m_member_nodes_db(
m_stash, m_relations_db),
96 m_member_ways_db(
m_stash, m_relations_db),
97 m_member_relations_db(
m_stash, m_relations_db) {
152 throw std::logic_error{
"Should not be here."};
172 throw std::logic_error{
"Should not be here."};
182 if (member.ref() == 0) {
300 template <
typename TManager,
bool TNodes,
bool TWays,
bool TRelations,
bool TCheckOrder = true>
442 return *
static_cast<TManager*
>(
this);
446 derived().complete_relation(*rel_handle);
449 for (
const auto& member : rel_handle->
members()) {
450 if (member.ref() != 0) {
462 m_check_order_handler(),
463 m_handler_pass2(*this) {
471 return m_handler_pass2;
485 if (derived().new_relation(relation)) {
489 for (
auto& member : rel_handle->members()) {
490 if (wanted_type(member.type()) &&
491 derived().new_member(relation, member, n)) {
503 m_check_order_handler.node(node);
504 derived().before_node(node);
506 handle_complete_relation(rel_handle);
509 derived().node_not_in_any_relation(node);
511 derived().after_node(node);
518 m_check_order_handler.way(way);
519 derived().before_way(way);
521 handle_complete_relation(rel_handle);
524 derived().way_not_in_any_relation(way);
526 derived().after_way(way);
533 m_check_order_handler.relation(relation);
534 derived().before_relation(relation);
536 handle_complete_relation(rel_handle);
539 derived().relation_not_in_any_relation(relation);
541 derived().after_relation(relation);
554 template <
typename TFunc>
565 #endif // OSMIUM_RELATIONS_RELATIONS_MANAGER_HPP void remove()
Definition: relations_database.hpp:274
std::size_t used_memory() const noexcept
Definition: members_database.hpp:187
void handle_node(const osmium::Node &node)
Definition: relations_manager.hpp:501
void set_callback(const callback_func_type &callback=nullptr) noexcept
Definition: callback_buffer.hpp:144
type
Definition: entity_bits.hpp:63
osmium::memory::Buffer read()
Return the contents of the output buffer.
Definition: relations_manager.hpp:275
void flush_output()
Flush the output buffer.
Definition: relations_manager.hpp:265
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:244
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:255
void for_each_relation(TFunc &&func)
Definition: relations_database.hpp:323
const TObject * get(osmium::object_id_type id) const
Definition: members_database.hpp:395
bool add(const TObject &object, TFunc &&func)
Definition: members_database.hpp:358
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:516
osmium::memory::Buffer & buffer() noexcept
Definition: callback_buffer.hpp:133
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:208
void possibly_flush()
Definition: callback_buffer.hpp:170
bool new_member(const osmium::Relation &, const osmium::RelationMember &, std::size_t) const noexcept
Definition: relations_manager.hpp:338
SecondPassHandler< RelationsManager > m_handler_pass2
Definition: relations_manager.hpp:307
void node_not_in_any_relation(const osmium::Node &) const noexcept
Definition: relations_manager.hpp:368
std::size_t used_memory() const noexcept
Definition: relations_database.hpp:144
TManager & derived() noexcept
Definition: relations_manager.hpp:441
Definition: manager_util.hpp:64
void before_way(const osmium::Way &) const noexcept
Definition: relations_manager.hpp:388
const osmium::Relation * get_member_relation(osmium::object_id_type id) const noexcept
Definition: relations_manager.hpp:223
SecondPassHandler< RelationsManager > & handler(const std::function< void(osmium::memory::Buffer &&)> &callback=nullptr)
Definition: relations_manager.hpp:469
Definition: item_stash.hpp:57
void way_not_in_any_relation(const osmium::Way &) const noexcept
Definition: relations_manager.hpp:398
const osmium::relations::MembersDatabase< osmium::Way > & member_ways_database() const noexcept
Access the internal database containing member ways.
Definition: relations_manager.hpp:121
typename std::conditional< true, osmium::handler::CheckOrder, osmium::handler::Handler >::type check_order_handler
Definition: relations_manager.hpp:303
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:126
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
void relation(const osmium::Relation &relation)
Definition: relations_manager.hpp:484
osmium::memory::Buffer read()
Definition: callback_buffer.hpp:181
RelationsManagerBase()
Definition: relations_manager.hpp:93
bool new_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:324
void handle_complete_relation(RelationHandle &rel_handle)
Definition: relations_manager.hpp:445
void after_way(const osmium::Way &) const noexcept
Definition: relations_manager.hpp:408
osmium::relations::MembersDatabase< osmium::Node > & member_nodes_database() noexcept
Access the internal database containing member nodes.
Definition: relations_manager.hpp:106
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:270
relations::MembersDatabaseCommon & member_database(osmium::item_type type)
Definition: relations_manager.hpp:141
const osmium::relations::MembersDatabase< osmium::Node > & member_nodes_database() const noexcept
Access the internal database containing member nodes.
Definition: relations_manager.hpp:111
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:209
void prepare_for_lookup()
Definition: relations_manager.hpp:235
osmium::relations::RelationsDatabase & relations_database() noexcept
Access the internal RelationsDatabase.
Definition: relations_manager.hpp:101
Definition: relations_database.hpp:82
object_id_type id() const noexcept
Get ID of this object.
Definition: object.hpp:122
const relations::MembersDatabaseCommon & member_database(osmium::item_type type) const
Definition: relations_manager.hpp:161
void relation(const osmium::Relation &) const noexcept
Definition: handler.hpp:84
void flush()
Definition: callback_buffer.hpp:156
Definition: buffer.hpp:97
RelationHandle add(const osmium::Relation &relation)
Definition: relations_database.hpp:317
void before_node(const osmium::Node &) const noexcept
Definition: relations_manager.hpp:358
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:195
relations::RelationsDatabase m_relations_db
Database of all relations we are interested in.
Definition: relations_manager.hpp:81
RelationsManager()
Definition: relations_manager.hpp:460
static bool wanted_type(osmium::item_type type) noexcept
Definition: relations_manager.hpp:309
const osmium::OSMObject * get_member_object(const osmium::RelationMember &member) const noexcept
Definition: relations_manager.hpp:181
Definition: members_database.hpp:62
void after_node(const osmium::Node &) const noexcept
Definition: relations_manager.hpp:378
Definition: callback_buffer.hpp:70
Definition: relations_manager.hpp:301
void before_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:418
check_order_handler m_check_order_handler
Definition: relations_manager.hpp:305
const osmium::relations::MembersDatabase< osmium::Relation > & member_relations_database() const noexcept
Access the internal database containing member relations.
Definition: relations_manager.hpp:131
void prepare_for_lookup()
Definition: members_database.hpp:259
void handle_relation(const osmium::Relation &relation)
Definition: relations_manager.hpp:531
void relation_not_in_any_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:428
void for_each_incomplete_relation(TFunc &&func)
Definition: relations_manager.hpp:555
void after_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:438
void complete_relation(const osmium::Relation &) const noexcept
Definition: relations_manager.hpp:348
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:260
osmium::relations::MembersDatabase< osmium::Way > & member_ways_database() noexcept
Access the internal database containing member ways.
Definition: relations_manager.hpp:116
Definition: object.hpp:64