1 #ifndef OSMIUM_MEMORY_ITEM_ITERATOR_HPP
2 #define OSMIUM_MEMORY_ITEM_ITERATOR_HPP
40 #include <type_traits>
53 return T::is_compatible_to(t);
58 template <
typename TMember>
65 using data_type =
typename std::conditional<std::is_const<TMember>::value,
const unsigned char*,
unsigned char*>
::type;
71 while (m_data != m_end &&
72 !detail::type_is_compatible<TMember>(reinterpret_cast<const osmium::memory::Item*>(m_data)->
type())) {
73 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
103 assert(m_data != m_end);
104 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
116 assert(m_data != m_end);
117 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
128 return m_data == rhs.m_data && m_end == rhs.m_end;
132 return !(*
this == rhs);
140 const unsigned char*
data() const noexcept {
147 assert(m_data != m_end);
148 return *
reinterpret_cast<TMember*
>(
m_data);
153 assert(m_data != m_end);
154 return reinterpret_cast<TMember*
>(
m_data);
157 explicit operator bool() const noexcept {
158 return (m_data !=
nullptr) && (m_data !=
m_end);
161 template <
typename TChar,
typename TTraits>
162 void print(std::basic_ostream<TChar, TTraits>& out)
const {
163 out << static_cast<const void*>(
m_data);
168 template <
typename TChar,
typename TTraits,
typename TMember>
169 inline std::basic_ostream<TChar, TTraits>& operator<<(std::basic_ostream<TChar, TTraits>& out,
const ItemIterator<TMember>& iter) {
174 template <
typename T>
180 using data_type =
typename std::conditional<std::is_const<T>::value,
const unsigned char*,
unsigned char*>
::type;
226 if (m_begin == m_end) {
248 #endif // OSMIUM_MEMORY_ITEM_ITERATOR_HPP
data_type m_end
Definition: item_iterator.hpp:183
type
Definition: entity_bits.hpp:63
Definition: item_iterator.hpp:175
Definition: item_iterator.hpp:59
ItemIteratorRange(data_type first, data_type last) noexcept
Definition: item_iterator.hpp:190
const_iterator begin() const noexcept
Definition: item_iterator.hpp:211
item_type
Definition: item_type.hpp:43
bool empty() const
Definition: item_iterator.hpp:238
data_type m_begin
Definition: item_iterator.hpp:182
const_iterator end() const noexcept
Definition: item_iterator.hpp:215
ItemIterator< TMember > operator++(int) noexcept
Definition: item_iterator.hpp:121
double distance(const osmium::geom::Coordinates &c1, const osmium::geom::Coordinates &c2)
Definition: haversine.hpp:66
TMember & operator*() const noexcept
Definition: item_iterator.hpp:145
void advance_to_next_item_of_right_type() noexcept
Definition: item_iterator.hpp:70
const unsigned char * data() const noexcept
Definition: item_iterator.hpp:140
value_type & reference
Definition: item_iterator.hpp:83
Namespace for everything in the Osmium library.
Definition: assembler.hpp:73
typename std::conditional< std::is_const< TItem >::value, const unsigned char *, unsigned char * >::type data_type
Definition: item_iterator.hpp:65
size_t size() const
Definition: item_iterator.hpp:225
ItemIterator(data_type data, data_type end) noexcept
Definition: item_iterator.hpp:90
ItemIterator< TMember > & advance_once() noexcept
Definition: item_iterator.hpp:114
osmium::io::InputIterator< osmium::io::Reader > end(osmium::io::Reader &)
Definition: reader_iterator.hpp:45
bool operator!=(const ItemIterator< TMember > &rhs) const noexcept
Definition: item_iterator.hpp:131
TItem value_type
Definition: item_iterator.hpp:80
ItemIterator() noexcept
Definition: item_iterator.hpp:85
data_type m_end
Definition: item_iterator.hpp:68
iterator end() noexcept
Definition: item_iterator.hpp:199
const_iterator cend() const noexcept
Definition: item_iterator.hpp:207
data_type m_data
Definition: item_iterator.hpp:67
std::forward_iterator_tag iterator_category
Definition: item_iterator.hpp:79
iterator begin() noexcept
Definition: item_iterator.hpp:195
const_iterator cbegin() const noexcept
Definition: item_iterator.hpp:203
std::ptrdiff_t difference_type
Definition: item_iterator.hpp:81
ItemIterator< TMember > & operator++() noexcept
Definition: item_iterator.hpp:101
data_type data() noexcept
Definition: item_iterator.hpp:135
ItemIterator< T > cast() const noexcept
Definition: item_iterator.hpp:97
value_type * pointer
Definition: item_iterator.hpp:82
typename std::conditional< std::is_const< T >::value, const unsigned char *, unsigned char * >::type data_type
Definition: item_iterator.hpp:180
TMember * operator->() const noexcept
Definition: item_iterator.hpp:151
bool operator==(const ItemIterator< TMember > &rhs) const noexcept
Definition: item_iterator.hpp:127
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: item_iterator.hpp:162