1 #ifndef OSMIUM_INDEX_ID_SET_HPP 2 #define OSMIUM_INDEX_ID_SET_HPP 42 #include <type_traits> 61 virtual ~IdSet() =
default;
66 virtual void set(T id) = 0;
71 virtual bool get(T id)
const noexcept = 0;
76 virtual bool empty()
const = 0;
81 virtual void clear() = 0;
86 virtual std::size_t
used_memory()
const noexcept = 0;
107 assert(cid < m_set->m_data.size());
108 if (!
m_set->m_data[cid]) {
155 return ! (*
this == rhs);
172 template <
typename T>
173 class IdSetDense :
public IdSet<T> {
185 std::vector<std::unique_ptr<unsigned char[]>>
m_data;
192 static std::size_t
offset(T
id) noexcept {
197 return 1 << (
id & 0x7);
206 if (cid >=
m_data.size()) {
210 auto& chunk =
m_data[cid];
234 if ((element &
bitmask(
id)) == 0) {
248 void set(T id)
final {
260 if ((element &
bitmask(
id)) != 0) {
271 bool get(T id)
const noexcept
final {
309 return {
this, 0,
last()};
322 template <
typename T>
332 void set(T id)
final {
341 bool get(T id)
const noexcept
final {
342 const auto it = std::find(
m_data.cbegin(),
m_data.cend(), id);
343 return it !=
m_data.cend();
357 return std::binary_search(
m_data.cbegin(),
m_data.cend(), id);
380 const auto last = std::unique(
m_data.begin(),
m_data.end());
391 std::size_t
size() const noexcept {
396 return m_data.capacity() *
sizeof(T);
421 template <
template<
typename>
class IdSetType>
444 #endif // OSMIUM_INDEX_ID_SET_HPP void unset(T id)
Definition: id_set.hpp:257
std::size_t used_memory() const noexcept final
Definition: id_set.hpp:304
T m_last
Definition: id_set.hpp:102
type
Definition: entity_bits.hpp:63
IdSetType< osmium::unsigned_object_id_type > id_set_type
Definition: id_set.hpp:424
Definition: id_set.hpp:422
std::forward_iterator_tag iterator_category
Definition: id_set.hpp:124
Definition: id_set.hpp:57
static std::size_t offset(T id) noexcept
Definition: id_set.hpp:192
item_type
Definition: item_type.hpp:43
T last() const noexcept
Definition: id_set.hpp:200
value_type * pointer
Definition: id_set.hpp:126
void clear() final
Definition: id_set.hpp:370
std::vector< T > m_data
Definition: id_set.hpp:325
Definition: id_set.hpp:91
unsigned int item_type_to_nwr_index(item_type type) noexcept
Definition: item_type.hpp:82
const_iterator cend() const noexcept
Definition: id_set.hpp:414
std::size_t used_memory() const noexcept final
Definition: id_set.hpp:395
bool get_binary_search(T id) const noexcept
Definition: id_set.hpp:356
const_iterator end() const noexcept
Definition: id_set.hpp:406
T m_size
Definition: id_set.hpp:186
IdSetDenseIterator< T > begin() const
Definition: id_set.hpp:308
bool operator==(const IdSetDenseIterator< T > &rhs) const noexcept
Definition: id_set.hpp:150
Definition: id_set.hpp:97
static constexpr const std::size_t chunk_bits
Definition: id_set.hpp:182
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
const_iterator begin() const noexcept
Definition: id_set.hpp:402
static unsigned char bitmask(T id) noexcept
Definition: id_set.hpp:196
const IdSetDense< T > * m_set
Definition: id_set.hpp:100
id_set_type & operator()(osmium::item_type type) noexcept
Definition: id_set.hpp:430
id_set_type m_sets[3]
Definition: id_set.hpp:426
IdSetDenseIterator(const IdSetDense< T > *set, T value, T last) noexcept
Definition: id_set.hpp:129
T operator*() const noexcept
Definition: id_set.hpp:158
T m_value
Definition: id_set.hpp:101
bool check_and_set(T id)
Definition: id_set.hpp:231
const id_set_type & operator()(osmium::item_type type) const noexcept
Definition: id_set.hpp:434
bool empty() const noexcept final
Definition: id_set.hpp:285
std::vector< std::unique_ptr< unsigned char[]> > m_data
Definition: id_set.hpp:185
IdSetDenseIterator< T > operator++(int) noexcept
Definition: id_set.hpp:144
IdSetDenseIterator< T > & operator++() noexcept
Definition: id_set.hpp:136
T value_type
Definition: id_set.hpp:125
value_type & reference
Definition: id_set.hpp:127
IdSetDenseIterator< T > end() const
Definition: id_set.hpp:312
virtual std::size_t used_memory() const noexcept=0
Definition: id_set.hpp:323
std::size_t size() const noexcept
Definition: id_set.hpp:391
bool operator!=(const IdSetDenseIterator< T > &rhs) const noexcept
Definition: id_set.hpp:154
const_iterator cbegin() const noexcept
Definition: id_set.hpp:410
typename std::vector< T >::const_iterator const_iterator
Iterator type. There is no non-const iterator.
Definition: id_set.hpp:400
void next() noexcept
Definition: id_set.hpp:104
bool empty() const noexcept final
Definition: id_set.hpp:363
void clear() final
Definition: id_set.hpp:299
T size() const noexcept
Definition: id_set.hpp:292
virtual bool empty() const =0
static std::size_t chunk_id(T id) noexcept
Definition: id_set.hpp:188
void sort_unique()
Definition: id_set.hpp:378
static constexpr const std::size_t chunk_size
Definition: id_set.hpp:183
unsigned char & get_element(T id)
Definition: id_set.hpp:204