Libosmium
2.15.5
Fast and flexible C++ library for working with OpenStreetMap data
|
Go to the documentation of this file. 1 #ifndef OSMIUM_INDEX_ID_SET_HPP
2 #define OSMIUM_INDEX_ID_SET_HPP
46 #include <type_traits>
70 virtual ~IdSet() =
default;
75 virtual void set(T
id) = 0;
80 virtual bool get(T
id)
const noexcept = 0;
85 virtual bool empty()
const = 0;
90 virtual void clear() = 0;
95 virtual std::size_t
used_memory()
const noexcept = 0;
106 default_chunk_bits = 22U
111 template <
typename T, std::
size_t chunk_bits = detail::default_chunk_bits>
117 template <
typename T, std::
size_t chunk_bits>
130 assert(cid < m_set->m_data.size());
132 m_value = (cid + 1) << (chunk_bits + 3);
178 return !(*
this == rhs);
195 template <
typename T, std::
size_t chunk_bits>
196 class IdSetDense :
public IdSet<T> {
205 std::vector<std::unique_ptr<unsigned char[]>>
m_data;
209 return id >> (chunk_bits + 3U);
212 static std::size_t
offset(T
id) noexcept {
213 return (
id >> 3U) & ((1U << chunk_bits) - 1U);
217 return 1U << (
id & 0x7U);
226 if (cid >=
m_data.size()) {
230 auto& chunk =
m_data[cid];
245 swap(first.m_data, second.m_data);
246 swap(first.m_size, second.m_size);
253 m_data.reserve(other.m_data.size());
254 for (
const auto& ptr: other.m_data) {
287 if ((element &
bitmask(
id)) == 0) {
313 if ((element &
bitmask(
id)) != 0) {
324 bool get(T
id)
const noexcept
final {
362 return {
this, 0,
last()};
375 template <
typename T>
394 bool get(T
id)
const noexcept
final {
395 const auto it = std::find(
m_data.cbegin(),
m_data.cend(),
id);
396 return it !=
m_data.cend();
410 return std::binary_search(
m_data.cbegin(),
m_data.cend(),
id);
433 const auto last = std::unique(
m_data.begin(),
m_data.end());
444 std::size_t
size() const noexcept {
449 return m_data.capacity() *
sizeof(T);
474 template <
template <
typename>
class IdSetType>
497 #endif // OSMIUM_INDEX_ID_SET_HPP
void next() noexcept
Definition: id_set.hpp:127
bool operator==(const IdSetDenseIterator &rhs) const noexcept
Definition: id_set.hpp:173
void sort_unique()
Definition: id_set.hpp:431
std::size_t used_memory() const noexcept final
Definition: id_set.hpp:448
bool empty() const noexcept final
Definition: id_set.hpp:416
const_iterator cbegin() const noexcept
Definition: id_set.hpp:463
id_set_type & operator()(osmium::item_type type) noexcept
Definition: id_set.hpp:483
virtual bool get(T id) const noexcept=0
bool get_binary_search(T id) const noexcept
Definition: id_set.hpp:409
bool check_and_set(T id)
Definition: id_set.hpp:284
IdSetDenseIterator operator++(int) noexcept
Definition: id_set.hpp:167
IdSetDenseIterator(const id_set *set, T value, T last) noexcept
Definition: id_set.hpp:152
void clear() final
Definition: id_set.hpp:423
static std::size_t chunk_id(T id) noexcept
Definition: id_set.hpp:208
T size() const noexcept
Definition: id_set.hpp:345
const id_set * m_set
Definition: id_set.hpp:123
T m_last
Definition: id_set.hpp:125
std::forward_iterator_tag iterator_category
Definition: id_set.hpp:147
IdSetDenseIterator & operator++() noexcept
Definition: id_set.hpp:159
Definition: id_set.hpp:475
std::vector< std::unique_ptr< unsigned char[]> > m_data
Definition: id_set.hpp:205
bool get(T id) const noexcept final
Definition: id_set.hpp:324
IdSetDense & operator=(IdSetDense other)
Definition: id_set.hpp:265
IdSetDense(const IdSetDense &other)
Definition: id_set.hpp:251
T m_size
Definition: id_set.hpp:206
T operator*() const noexcept
Definition: id_set.hpp:181
std::size_t size() const noexcept
Definition: id_set.hpp:444
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
std::size_t used_memory() const noexcept final
Definition: id_set.hpp:357
const_iterator end() const
Definition: id_set.hpp:365
IdSet & operator=(const IdSet &)=default
bool get(T id) const noexcept final
Definition: id_set.hpp:394
std::array< id_set_type, 3 > m_sets
Definition: id_set.hpp:479
Definition: id_set.hpp:112
Definition: id_set.hpp:118
const_iterator begin() const
Definition: id_set.hpp:361
static unsigned int bitmask(T id) noexcept
Definition: id_set.hpp:216
unsigned char & get_element(T id)
Definition: id_set.hpp:224
T last() const noexcept
Definition: id_set.hpp:220
void clear() final
Definition: id_set.hpp:352
virtual std::size_t used_memory() const noexcept=0
IdSetType< osmium::unsigned_object_id_type > id_set_type
Definition: id_set.hpp:477
@ chunk_size
Definition: id_set.hpp:202
value_type & reference
Definition: id_set.hpp:150
friend void swap(IdSetDense &first, IdSetDense &second) noexcept
Definition: id_set.hpp:243
typename std::vector< T >::const_iterator const_iterator
Iterator type. There is no non-const iterator.
Definition: id_set.hpp:453
const id_set_type & operator()(osmium::item_type type) const noexcept
Definition: id_set.hpp:487
bool operator!=(const IdSetDenseIterator &rhs) const noexcept
Definition: id_set.hpp:177
const_iterator cend() const noexcept
Definition: id_set.hpp:467
static std::size_t offset(T id) noexcept
Definition: id_set.hpp:212
T value_type
Definition: id_set.hpp:148
void set(T id) final
Definition: id_set.hpp:385
void swap(Buffer &lhs, Buffer &rhs)
Definition: buffer.hpp:885
const_iterator end() const noexcept
Definition: id_set.hpp:459
virtual bool empty() const =0
void set(T id) final
Definition: id_set.hpp:301
bool empty() const noexcept final
Definition: id_set.hpp:338
std::vector< T > m_data
Definition: id_set.hpp:378
void unset(T id)
Definition: id_set.hpp:310
value_type * pointer
Definition: id_set.hpp:149
Definition: id_set.hpp:58
const_iterator begin() const noexcept
Definition: id_set.hpp:455
type
Definition: entity_bits.hpp:63
item_type
Definition: item_type.hpp:43
unsigned int item_type_to_nwr_index(item_type type) noexcept
Definition: item_type.hpp:82
T m_value
Definition: id_set.hpp:124
Definition: id_set.hpp:376