1 #ifndef OSMIUM_INDEX_MULTIMAP_SPARSE_MEM_MULTIMAP_HPP 2 #define OSMIUM_INDEX_MULTIMAP_SPARSE_MEM_MULTIMAP_HPP 43 #include <osmium/io/detail/read_write.hpp> 55 template <
typename TId,
typename TValue>
62 static constexpr
size_t element_size =
sizeof(TId) +
sizeof(TValue) +
sizeof(
void*) * 4;
67 using iterator =
typename collection_type::iterator;
83 m_elements.emplace(
id, value);
86 void set(
const TId id,
const TValue value)
final {
87 m_elements.emplace(
id, value);
90 std::pair<iterator, iterator>
get_all(
const TId
id) {
91 return m_elements.equal_range(
id);
94 std::pair<const_iterator, const_iterator>
get_all(
const TId
id)
const {
95 return m_elements.equal_range(
id);
98 void remove(
const TId id,
const TValue value) {
99 std::pair<iterator, iterator> r =
get_all(
id);
100 for (
iterator it = r.first; it != r.second; ++it) {
101 if (it->second == value) {
102 m_elements.erase(it);
109 return m_elements.begin();
113 return m_elements.end();
117 return m_elements.size();
121 return element_size * m_elements.size();
133 std::vector<element_type> v;
134 v.reserve(m_elements.size());
135 for (
const auto& element : m_elements) {
136 v.emplace_back(element.first, element.second);
138 std::sort(v.begin(), v.end());
139 osmium::io::detail::reliable_write(fd, reinterpret_cast<const char*>(v.data()),
sizeof(
element_type) * v.size());
150 #endif // OSMIUM_INDEX_MULTIMAP_SPARSE_MEM_MULTIMAP_HPP typename std::pair< TId, TValue > element_type
Definition: sparse_mem_multimap.hpp:70
size_t used_memory() const final
Definition: sparse_mem_multimap.hpp:120
typename collection_type::const_iterator const_iterator
Definition: sparse_mem_multimap.hpp:68
void unsorted_set(const TId id, const TValue value)
Definition: sparse_mem_multimap.hpp:82
typename collection_type::iterator iterator
Definition: sparse_mem_multimap.hpp:67
typename std::multimap< const TId, TValue > collection_type
Definition: sparse_mem_multimap.hpp:66
iterator end()
Definition: sparse_mem_multimap.hpp:112
collection_type m_elements
Definition: sparse_mem_multimap.hpp:74
~SparseMemMultimap() noexcept final=default
std::pair< iterator, iterator > get_all(const TId id)
Definition: sparse_mem_multimap.hpp:90
void consolidate()
Definition: sparse_mem_multimap.hpp:128
void dump_as_list(const int fd) final
Definition: sparse_mem_multimap.hpp:132
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
SparseMemMultimap()=default
typename collection_type::value_type value_type
Definition: sparse_mem_multimap.hpp:69
Definition: sparse_mem_multimap.hpp:56
void clear() final
Definition: sparse_mem_multimap.hpp:124
Definition: multimap.hpp:51
size_t size() const final
Definition: sparse_mem_multimap.hpp:116
iterator begin()
Definition: sparse_mem_multimap.hpp:108
std::pair< const_iterator, const_iterator > get_all(const TId id) const
Definition: sparse_mem_multimap.hpp:94
static constexpr size_t element_size
Definition: sparse_mem_multimap.hpp:62