1 #ifndef OSMIUM_ITEM_ITERATOR_HPP
2 #define OSMIUM_ITEM_ITERATOR_HPP
39 #include <type_traits>
97 inline bool type_is_compatible<osmium::WayNodeList>(
osmium::item_type t) noexcept {
102 inline bool type_is_compatible<osmium::RelationMemberList>(
osmium::item_type t) noexcept {
107 inline bool type_is_compatible<osmium::OuterRing>(
osmium::item_type t) noexcept {
112 inline bool type_is_compatible<osmium::InnerRing>(
osmium::item_type t) noexcept {
118 template <
typename TMember>
119 class ItemIterator :
public std::iterator<std::forward_iterator_tag, TMember> {
125 typedef typename std::conditional<std::is_const<TMember>::value,
const unsigned char*,
unsigned char*>
::type data_type;
131 while (m_data != m_end &&
133 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
150 template <
typename T>
157 assert(m_data != m_end);
158 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
170 assert(m_data != m_end);
171 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
186 return !(*
this == rhs);
196 assert(m_data != m_end);
197 return *
reinterpret_cast<TMember*
>(
m_data);
202 assert(m_data != m_end);
203 return reinterpret_cast<TMember*
>(
m_data);
206 explicit operator bool()
const {
207 return (m_data !=
nullptr) && (m_data !=
m_end);
210 template <
typename TChar,
typename TTraits>
211 friend std::basic_ostream<TChar, TTraits>& operator<<(std::basic_ostream<TChar, TTraits>& out,
const ItemIterator<TMember>& iter) {
212 return out << static_cast<void*>(iter.m_data);
221 #endif // OSMIUM_ITEM_ITERATOR_HPP
std::conditional< std::is_const< TMember >::value, const unsigned char *, unsigned char * >::type data_type
Definition: item_iterator.hpp:125
TMember * operator->() const
Definition: item_iterator.hpp:200
type
Definition: entity_bits.hpp:60
TMember & operator*() const
Definition: item_iterator.hpp:194
Definition: item_iterator.hpp:119
item_type
Definition: item_type.hpp:43
ItemIterator< TMember > & advance_once()
Definition: item_iterator.hpp:168
bool operator==(const ItemIterator< TMember > &rhs) const
Definition: item_iterator.hpp:181
unsigned char * data() const
Definition: item_iterator.hpp:189
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
osmium::io::InputIterator< osmium::io::Reader > end(osmium::io::Reader &)
Definition: reader_iterator.hpp:45
void advance_to_next_item_of_right_type()
Definition: item_iterator.hpp:130
ItemIterator() noexcept
Definition: item_iterator.hpp:139
data_type m_end
Definition: item_iterator.hpp:128
data_type m_data
Definition: item_iterator.hpp:127
bool operator!=(const ItemIterator< TMember > &rhs) const
Definition: item_iterator.hpp:185
ItemIterator< TMember > operator++(int)
Definition: item_iterator.hpp:175
ItemIterator< T > cast() const
Definition: item_iterator.hpp:151
ItemIterator(data_type data, data_type end)
Definition: item_iterator.hpp:144
ItemIterator< TMember > & operator++()
Definition: item_iterator.hpp:155