1 #ifndef OSMIUM_INDEX_MULTIMAP_HYBRID_HPP
2 #define OSMIUM_INDEX_MULTIMAP_HYBRID_HPP
50 template <
typename TId,
typename TValue>
66 typename main_map_type::iterator end_main,
69 m_begin_main(begin_main),
71 m_begin_extra(begin_extra),
72 m_end_extra(end_extra) {
78 if (m_begin_main == m_end_main) {
82 while (m_begin_main != m_end_main && m_begin_main->second == osmium::index::empty_value<TValue>()) {
107 if (m_begin_main == m_end_main) {
120 template <
typename TId,
typename TValue>
142 return m_main.size() + m_extra.
size();
146 return m_main.used_memory() + m_extra.
used_memory();
150 m_main.reserve(size);
154 m_main.set(
id, value);
157 void set(
const TId
id,
const TValue value)
final {
158 m_extra.
set(
id, value);
161 std::pair<iterator, iterator>
get_all(
const TId
id) {
162 auto result_main = m_main.get_all(
id);
163 auto result_extra = m_extra.
get_all(
id);
164 return std::make_pair(
iterator(result_main.first, result_main.second, result_extra.first, result_extra.second),
165 iterator(result_main.second, result_main.second, result_extra.second, result_extra.second));
168 void remove(
const TId id,
const TValue value) {
169 m_main.remove(
id, value);
170 m_extra.
remove(
id, value);
174 m_main.erase_removed();
175 for (
const auto& element : m_extra) {
176 m_main.set(element.first, element.second);
184 m_main.dump_as_list(fd);
204 #endif // OSMIUM_INDEX_MULTIMAP_HYBRID_HPP
SparseMemArray< TId, TValue > main_map_type
Definition: hybrid.hpp:123
void reserve(const size_t size)
Definition: hybrid.hpp:149
HybridIterator< TId, TValue > iterator
Definition: hybrid.hpp:131
SparseMemArray< TId, TValue > main_map_type
Definition: hybrid.hpp:53
VectorBasedSparseMultimap< TId, TValue, StdVectorWrap > SparseMemArray
Definition: sparse_mem_array.hpp:50
~Hybrid() noexcept=default
Hybrid()
Definition: hybrid.hpp:134
void unsorted_set(const TId id, const TValue value)
Definition: hybrid.hpp:153
void remove(const TId id, const TValue value)
Definition: sparse_mem_multimap.hpp:99
std::pair< iterator, iterator > get_all(const TId id)
Definition: sparse_mem_multimap.hpp:91
bool operator!=(const HybridIterator &rhs) const
Definition: hybrid.hpp:102
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
std::pair< iterator, iterator > get_all(const TId id)
Definition: hybrid.hpp:161
void consolidate()
Definition: hybrid.hpp:173
const element_type & operator*()
Definition: hybrid.hpp:106
HybridIterator< TId, TValue > operator++(int)
Definition: hybrid.hpp:89
extra_map_type m_extra
Definition: hybrid.hpp:127
HybridIterator & operator++()
Definition: hybrid.hpp:77
collection_type::iterator iterator
Definition: sparse_mem_multimap.hpp:67
main_map_type::iterator m_end_main
Definition: hybrid.hpp:59
HybridIterator(typename main_map_type::iterator begin_main, typename main_map_type::iterator end_main, typename extra_map_type::iterator begin_extra, typename extra_map_type::iterator end_extra)
Definition: hybrid.hpp:65
Definition: sparse_mem_multimap.hpp:56
void clear() final
Definition: sparse_mem_multimap.hpp:125
main_map_type m_main
Definition: hybrid.hpp:126
void set(const TId id, const TValue value) final
Set the field with id to value.
Definition: hybrid.hpp:157
extra_map_type::iterator m_begin_extra
Definition: hybrid.hpp:60
size_t used_memory() const final
Definition: hybrid.hpp:145
Definition: multimap.hpp:51
Definition: hybrid.hpp:121
~HybridIterator() noexcept=default
const element_type * operator->()
Definition: hybrid.hpp:114
main_map_type::iterator m_begin_main
Definition: hybrid.hpp:58
size_t used_memory() const final
Definition: sparse_mem_multimap.hpp:121
void set(const TId id, const TValue value) final
Set the field with id to value.
Definition: sparse_mem_multimap.hpp:87
size_t size() const final
Definition: sparse_mem_multimap.hpp:117
Definition: hybrid.hpp:51
extra_map_type::iterator m_end_extra
Definition: hybrid.hpp:61
bool operator==(const HybridIterator &rhs) const
Definition: hybrid.hpp:95
SparseMemMultimap< TId, TValue > extra_map_type
Definition: hybrid.hpp:124
SparseMemMultimap< TId, TValue > extra_map_type
Definition: hybrid.hpp:54
void dump_as_list(const int fd) final
Definition: hybrid.hpp:182
void clear() final
Definition: hybrid.hpp:187
void sort() final
Definition: hybrid.hpp:192
const HybridIterator< TId, TValue > const_iterator
Definition: hybrid.hpp:132
std::pair< TId, TValue > element_type
Definition: hybrid.hpp:56
size_t size() const final
Definition: hybrid.hpp:141