1 #ifndef OSMIUM_RELATIONS_RELATIONS_DATABASE_HPP 2 #define OSMIUM_RELATIONS_RELATIONS_DATABASE_HPP 106 assert(pos < m_elements.size());
114 std::size_t&
members(std::size_t pos) noexcept {
115 return m_elements[pos].members;
118 void remove(std::size_t pos) {
119 auto& elem = m_elements[pos];
145 return sizeof(
element) * m_elements.capacity() +
155 std::size_t
size() const noexcept {
156 return m_elements.size();
185 return std::count_if(m_elements.cbegin(), m_elements.cend(), [&](
const element& elem) {
186 return elem.handle.valid();
197 template <
typename TFunc>
216 m_relation_database(relation_database),
226 return m_relation_database;
238 std::size_t
pos() const noexcept {
275 m_relation_database->
remove(pos());
282 m_relation_database->
members(m_pos) = value;
289 ++(m_relation_database->
members(m_pos));
298 assert(m_relation_database->
members(m_pos) > 0);
299 --(m_relation_database->
members(m_pos));
307 return m_relation_database->
members(m_pos) == 0;
322 template <
typename TFunc>
324 for (std::size_t pos = 0; pos <
m_elements.size(); ++pos) {
335 #endif // OSMIUM_RELATIONS_RELATIONS_DATABASE_HPP std::size_t & members(std::size_t pos) noexcept
Definition: relations_database.hpp:114
std::size_t members
Definition: relations_database.hpp:98
void for_each_relation(TFunc &&func)
Definition: relations_database.hpp:323
handle_type add_item(const osmium::memory::Item &item)
Definition: item_stash.hpp:241
Definition: relation.hpp:168
Definition: item_stash.hpp:71
osmium::ItemStash & m_stash
Definition: relations_database.hpp:102
Definition: relations_database.hpp:86
void decrement_members() noexcept
Definition: relations_database.hpp:297
std::size_t used_memory() const noexcept
Definition: relations_database.hpp:144
void remove(std::size_t pos)
Definition: relations_database.hpp:118
std::size_t pos() const noexcept
Definition: relations_database.hpp:238
Relation * operator->()
Definition: relations_database.hpp:259
Definition: item_stash.hpp:57
Relation & operator*()
Definition: relations_database.hpp:245
T & get(handle_type handle) const
Definition: item_stash.hpp:284
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
void increment_members() noexcept
Definition: relations_database.hpp:288
void set_members(std::size_t value) noexcept
Definition: relations_database.hpp:281
const Relation * operator->() const
Definition: relations_database.hpp:266
RelationHandle operator[](std::size_t pos) noexcept
Definition: relations_database.hpp:312
RelationsDatabase * m_relation_database
Definition: relations_database.hpp:212
osmium::ItemStash::handle_type handle
A handle to the relation in the ItemStash.
Definition: relations_database.hpp:89
bool has_all_members() const noexcept
Definition: relations_database.hpp:306
std::vector< element > m_elements
Definition: relations_database.hpp:103
Definition: relations_database.hpp:208
RelationsDatabase(osmium::ItemStash &stash)
Definition: relations_database.hpp:133
std::size_t count_relations() const noexcept
Definition: relations_database.hpp:184
Definition: relations_database.hpp:82
std::size_t size() const noexcept
Definition: relations_database.hpp:155
const Relation & operator*() const
Definition: relations_database.hpp:252
void remove_item(handle_type handle)
Definition: item_stash.hpp:328
RelationHandle add(const osmium::Relation &relation)
Definition: relations_database.hpp:317
bool valid() const noexcept
Is this a valid handle?
Definition: item_stash.hpp:90
osmium::Relation & get_relation(std::size_t pos)
Definition: relations_database.hpp:105
RelationsDatabase * relation_database() const noexcept
Definition: relations_database.hpp:225
Definition: entity_bits.hpp:70
std::size_t m_pos
Definition: relations_database.hpp:213
RelationHandle(RelationsDatabase *relation_database, std::size_t pos)
Definition: relations_database.hpp:215