1 #ifndef OSMIUM_ITEM_ITERATOR_HPP
2 #define OSMIUM_ITEM_ITERATOR_HPP
39 #include <type_traits>
55 class RelationMemberList;
109 inline bool type_is_compatible<osmium::WayNodeList>(
osmium::item_type t) noexcept {
114 inline bool type_is_compatible<osmium::RelationMemberList>(
osmium::item_type t) noexcept {
119 inline bool type_is_compatible<osmium::OuterRing>(
osmium::item_type t) noexcept {
124 inline bool type_is_compatible<osmium::InnerRing>(
osmium::item_type t) noexcept {
130 template <
class TMember>
131 class ItemIterator :
public std::iterator<std::forward_iterator_tag, TMember> {
137 typedef typename std::conditional<std::is_const<TMember>::value,
const unsigned char*,
unsigned char*>
::type data_type;
143 while (m_data != m_end &&
145 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
169 assert(m_data != m_end);
170 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
182 assert(m_data != m_end);
183 m_data =
reinterpret_cast<TMember*
>(
m_data)->next();
198 return !(*
this == rhs);
208 assert(m_data != m_end);
209 return *
reinterpret_cast<TMember*
>(
m_data);
214 assert(m_data != m_end);
215 return reinterpret_cast<TMember*
>(
m_data);
218 explicit operator bool()
const {
219 return m_data !=
nullptr;
222 template <
typename TChar,
typename TTraits>
223 friend std::basic_ostream<TChar, TTraits>& operator<<(std::basic_ostream<TChar, TTraits>& out,
const ItemIterator<TMember>& iter) {
224 return out << static_cast<void*>(iter.m_data);
233 #endif // OSMIUM_ITEM_ITERATOR_HPP
std::conditional< std::is_const< TMember >::value, const unsigned char *, unsigned char * >::type data_type
Definition: item_iterator.hpp:137
TMember * operator->() const
Definition: item_iterator.hpp:212
type
Definition: entity_bits.hpp:60
TMember & operator*() const
Definition: item_iterator.hpp:206
Definition: item_iterator.hpp:131
item_type
Definition: item_type.hpp:43
ItemIterator< TMember > & advance_once()
Definition: item_iterator.hpp:180
bool operator==(const ItemIterator< TMember > &rhs) const
Definition: item_iterator.hpp:193
unsigned char * data() const
Definition: item_iterator.hpp:201
Namespace for everything in the Osmium library.
Definition: assembler.hpp:55
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:142
ItemIterator() noexcept
Definition: item_iterator.hpp:151
data_type m_end
Definition: item_iterator.hpp:140
data_type m_data
Definition: item_iterator.hpp:139
bool operator!=(const ItemIterator< TMember > &rhs) const
Definition: item_iterator.hpp:197
ItemIterator< TMember > operator++(int)
Definition: item_iterator.hpp:187
ItemIterator< T > cast() const
Definition: item_iterator.hpp:163
ItemIterator(data_type data, data_type end)
Definition: item_iterator.hpp:156
ItemIterator< TMember > & operator++()
Definition: item_iterator.hpp:167