1 #ifndef OSMIUM_ITEM_ITERATOR_HPP
2 #define OSMIUM_ITEM_ITERATOR_HPP
40 #include <type_traits>
55 class RelationMemberList;
100 inline bool type_is_compatible<osmium::OSMEntity>(
osmium::item_type t) noexcept {
110 inline bool type_is_compatible<osmium::WayNodeList>(
osmium::item_type t) noexcept {
115 inline bool type_is_compatible<osmium::RelationMemberList>(
osmium::item_type t) noexcept {
120 inline bool type_is_compatible<osmium::OuterRing>(
osmium::item_type t) noexcept {
125 inline bool type_is_compatible<osmium::InnerRing>(
osmium::item_type t) noexcept {
131 template <
typename TMember>
138 using data_type =
typename std::conditional<std::is_const<TMember>::value,
const unsigned char*,
unsigned char*>
::type;
144 while (m_data != m_end &&
146 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
169 template <
typename T>
176 assert(m_data != m_end);
177 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
189 assert(m_data != m_end);
190 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
201 return m_data == rhs.m_data && m_end == rhs.m_end;
205 return !(*
this == rhs);
213 const unsigned char*
data() const noexcept {
220 assert(m_data != m_end);
221 return *
reinterpret_cast<TMember*
>(
m_data);
226 assert(m_data != m_end);
227 return reinterpret_cast<TMember*
>(
m_data);
230 explicit operator bool() const noexcept {
231 return (m_data !=
nullptr) && (m_data !=
m_end);
234 template <
typename TChar,
typename TTraits>
235 void print(std::basic_ostream<TChar, TTraits>& out)
const {
236 out << static_cast<const void*>(
m_data);
241 template <
typename TChar,
typename TTraits,
typename TMember>
242 inline std::basic_ostream<TChar, TTraits>& operator<<(std::basic_ostream<TChar, TTraits>& out,
const ItemIterator<TMember>& iter) {
247 template <
typename T>
253 using data_type =
typename std::conditional<std::is_const<T>::value,
const unsigned char*,
unsigned char*>
::type;
299 if (m_begin == m_end) {
321 #endif // OSMIUM_ITEM_ITERATOR_HPP
data_type m_end
Definition: item_iterator.hpp:256
type
Definition: entity_bits.hpp:63
Definition: item_iterator.hpp:248
Definition: item_iterator.hpp:132
ItemIteratorRange(data_type first, data_type last) noexcept
Definition: item_iterator.hpp:263
const_iterator begin() const noexcept
Definition: item_iterator.hpp:284
item_type
Definition: item_type.hpp:43
bool empty() const
Definition: item_iterator.hpp:311
data_type m_begin
Definition: item_iterator.hpp:255
const_iterator end() const noexcept
Definition: item_iterator.hpp:288
ItemIterator< TMember > operator++(int) noexcept
Definition: item_iterator.hpp:194
double distance(const osmium::geom::Coordinates &c1, const osmium::geom::Coordinates &c2)
Definition: haversine.hpp:64
TMember & operator*() const noexcept
Definition: item_iterator.hpp:218
void advance_to_next_item_of_right_type() noexcept
Definition: item_iterator.hpp:143
const unsigned char * data() const noexcept
Definition: item_iterator.hpp:213
value_type & reference
Definition: item_iterator.hpp:156
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:138
size_t size() const
Definition: item_iterator.hpp:298
ItemIterator(data_type data, data_type end) noexcept
Definition: item_iterator.hpp:163
ItemIterator< TMember > & advance_once() noexcept
Definition: item_iterator.hpp:187
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:204
TItem value_type
Definition: item_iterator.hpp:153
ItemIterator() noexcept
Definition: item_iterator.hpp:158
data_type m_end
Definition: item_iterator.hpp:141
iterator end() noexcept
Definition: item_iterator.hpp:272
const_iterator cend() const noexcept
Definition: item_iterator.hpp:280
data_type m_data
Definition: item_iterator.hpp:140
std::forward_iterator_tag iterator_category
Definition: item_iterator.hpp:152
iterator begin() noexcept
Definition: item_iterator.hpp:268
const_iterator cbegin() const noexcept
Definition: item_iterator.hpp:276
std::ptrdiff_t difference_type
Definition: item_iterator.hpp:154
ItemIterator< TMember > & operator++() noexcept
Definition: item_iterator.hpp:174
data_type data() noexcept
Definition: item_iterator.hpp:208
ItemIterator< T > cast() const noexcept
Definition: item_iterator.hpp:170
value_type * pointer
Definition: item_iterator.hpp:155
typename std::conditional< std::is_const< T >::value, const unsigned char *, unsigned char * >::type data_type
Definition: item_iterator.hpp:253
TMember * operator->() const noexcept
Definition: item_iterator.hpp:224
bool operator==(const ItemIterator< TMember > &rhs) const noexcept
Definition: item_iterator.hpp:200
void print(std::basic_ostream< TChar, TTraits > &out) const
Definition: item_iterator.hpp:235