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) {
76 if (m_begin_main == m_end_main) {
80 while (m_begin_main != m_end_main && m_begin_main->second == osmium::index::empty_value<TValue>()) {
105 if (m_begin_main == m_end_main) {
118 template <
typename TId,
typename TValue>
137 size_t size() const override final {
138 return m_main.size() + m_extra.
size();
142 return m_main.used_memory() + m_extra.
used_memory();
146 m_main.reserve(size);
150 m_main.set(
id, value);
153 void set(
const TId
id,
const TValue value)
override final {
154 m_extra.
set(
id, value);
157 std::pair<iterator, iterator>
get_all(
const TId
id) {
158 auto result_main = m_main.get_all(
id);
159 auto result_extra = m_extra.
get_all(
id);
160 return std::make_pair(
iterator(result_main.first, result_main.second, result_extra.first, result_extra.second),
161 iterator(result_main.second, result_main.second, result_extra.second, result_extra.second));
164 void remove(
const TId id,
const TValue value) {
165 m_main.remove(
id, value);
166 m_extra.
remove(
id, value);
170 m_main.erase_removed();
171 for (
const auto& element : m_extra) {
172 m_main.set(element.first, element.second);
180 m_main.dump_as_list(fd);
200 #endif // OSMIUM_INDEX_MULTIMAP_HYBRID_HPP
void set(const TId id, const TValue value) overridefinal
Set the field with id to value.
Definition: hybrid.hpp:153
SparseMemArray< TId, TValue > main_map_type
Definition: hybrid.hpp:121
void reserve(const size_t size)
Definition: hybrid.hpp:145
size_t size() const overridefinal
Definition: sparse_mem_multimap.hpp:117
HybridIterator< TId, TValue > iterator
Definition: hybrid.hpp:129
SparseMemArray< TId, TValue > main_map_type
Definition: hybrid.hpp:53
VectorBasedSparseMultimap< TId, TValue, StdVectorWrap > SparseMemArray
Definition: sparse_mem_array.hpp:50
Hybrid()
Definition: hybrid.hpp:132
void unsorted_set(const TId id, const TValue value)
Definition: hybrid.hpp:149
void remove(const TId id, const TValue value)
Definition: sparse_mem_multimap.hpp:99
size_t used_memory() const overridefinal
Definition: hybrid.hpp:141
std::pair< iterator, iterator > get_all(const TId id)
Definition: sparse_mem_multimap.hpp:91
bool operator!=(const HybridIterator &rhs) const
Definition: hybrid.hpp:100
Namespace for everything in the Osmium library.
Definition: assembler.hpp:55
std::pair< iterator, iterator > get_all(const TId id)
Definition: hybrid.hpp:157
void consolidate()
Definition: hybrid.hpp:169
size_t used_memory() const overridefinal
Definition: sparse_mem_multimap.hpp:121
const element_type & operator*()
Definition: hybrid.hpp:104
HybridIterator< TId, TValue > operator++(int)
Definition: hybrid.hpp:87
extra_map_type m_extra
Definition: hybrid.hpp:125
HybridIterator & operator++()
Definition: hybrid.hpp:75
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
void set(const TId id, const TValue value) overridefinal
Set the field with id to value.
Definition: sparse_mem_multimap.hpp:87
Definition: sparse_mem_multimap.hpp:56
main_map_type m_main
Definition: hybrid.hpp:124
void clear() overridefinal
Definition: sparse_mem_multimap.hpp:125
extra_map_type::iterator m_begin_extra
Definition: hybrid.hpp:60
void clear() overridefinal
Definition: hybrid.hpp:183
void dump_as_list(const int fd) overridefinal
Definition: hybrid.hpp:178
Definition: multimap.hpp:51
Definition: hybrid.hpp:119
void sort() overridefinal
Definition: hybrid.hpp:188
const element_type * operator->()
Definition: hybrid.hpp:112
main_map_type::iterator m_begin_main
Definition: hybrid.hpp:58
Definition: hybrid.hpp:51
extra_map_type::iterator m_end_extra
Definition: hybrid.hpp:61
bool operator==(const HybridIterator &rhs) const
Definition: hybrid.hpp:93
SparseMemMultimap< TId, TValue > extra_map_type
Definition: hybrid.hpp:122
SparseMemMultimap< TId, TValue > extra_map_type
Definition: hybrid.hpp:54
size_t size() const overridefinal
Definition: hybrid.hpp:137
const HybridIterator< TId, TValue > const_iterator
Definition: hybrid.hpp:130
std::pair< TId, TValue > element_type
Definition: hybrid.hpp:56