rapidxml_iterators.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 // Copyright (C) 2006, 2009 Marcin Kalicinski
4 // Version 1.13
5 // Revision $DateTime: 2009/05/13 01:46:17 $
6 //! \file rapidxml_iterators.hpp This file contains rapidxml iterators
7 
8 #include "rapidxml.hpp"
9 
10 namespace rapidxml
11 {
12 
13  //! Iterator of child nodes of xml_node
14  template <class Ch>
16  {
17 
18  public:
19  using value_type = typename xml_node<Ch>;
20  using reference = typename xml_node<Ch>&;
21  using pointer = typename xml_node<Ch>*;
22  using difference_type = std::ptrdiff_t;
23  using iterator_category = std::bidirectional_iterator_tag;
24 
25  node_iterator() : m_node(0)
26  {
27  }
28 
29  node_iterator(xml_node<Ch>* node) : m_node(node->first_node())
30  {
31  }
32 
33  reference
34  operator*() const
35  {
36  assert(m_node);
37  return *m_node;
38  }
39 
40  pointer
41  operator->() const
42  {
43  assert(m_node);
44  return m_node;
45  }
46 
49  {
50  assert(m_node);
51  m_node = m_node->next_sibling();
52  return *this;
53  }
54 
57  {
58  node_iterator tmp = *this;
59  ++this;
60  return tmp;
61  }
62 
65  {
66  assert(m_node && m_node->previous_sibling());
67  m_node = m_node->previous_sibling();
68  return *this;
69  }
70 
73  {
74  node_iterator tmp = *this;
75  ++this;
76  return tmp;
77  }
78 
79  bool
81  {
82  return m_node == rhs.m_node;
83  }
84 
85  bool
87  {
88  return m_node != rhs.m_node;
89  }
90 
91  private:
92  xml_node<Ch>* m_node;
93  };
94 
95  //! Iterator of child attributes of xml_node
96  template <class Ch>
98  {
99 
100  public:
101  using value_type = typename xml_attribute<Ch>;
102  using reference = typename xml_attribute<Ch>&;
103  using pointer = typename xml_attribute<Ch>*;
104  using difference_type = std::ptrdiff_t;
105  using iterator_category = std::bidirectional_iterator_tag;
106 
107  attribute_iterator() : m_attribute(0)
108  {
109  }
110 
111  attribute_iterator(xml_node<Ch>* node) : m_attribute(node->first_attribute())
112  {
113  }
114 
115  reference
116  operator*() const
117  {
118  assert(m_attribute);
119  return *m_attribute;
120  }
121 
122  pointer
123  operator->() const
124  {
125  assert(m_attribute);
126  return m_attribute;
127  }
128 
131  {
132  assert(m_attribute);
133  m_attribute = m_attribute->next_attribute();
134  return *this;
135  }
136 
139  {
140  attribute_iterator tmp = *this;
141  ++this;
142  return tmp;
143  }
144 
147  {
148  assert(m_attribute && m_attribute->previous_attribute());
149  m_attribute = m_attribute->previous_attribute();
150  return *this;
151  }
152 
155  {
156  attribute_iterator tmp = *this;
157  ++this;
158  return tmp;
159  }
160 
161  bool
163  {
164  return m_attribute == rhs.m_attribute;
165  }
166 
167  bool
169  {
170  return m_attribute != rhs.m_attribute;
171  }
172 
173  private:
174  xml_attribute<Ch>* m_attribute;
175  };
176 
177 } // namespace rapidxml
rapidxml::node_iterator::node_iterator
node_iterator()
Definition: rapidxml_iterators.hpp:25
rapidxml::attribute_iterator
Iterator of child attributes of xml_node.
Definition: rapidxml_iterators.hpp:97
rapidxml::node_iterator::node_iterator
node_iterator(xml_node< Ch > *node)
Definition: rapidxml_iterators.hpp:29
rapidxml::attribute_iterator::value_type
typename xml_attribute< Ch > value_type
Definition: rapidxml_iterators.hpp:101
rapidxml::node_iterator::operator==
bool operator==(const node_iterator< Ch > &rhs)
Definition: rapidxml_iterators.hpp:80
rapidxml::node_iterator::operator!=
bool operator!=(const node_iterator< Ch > &rhs)
Definition: rapidxml_iterators.hpp:86
rapidxml::attribute_iterator::pointer
typename xml_attribute< Ch > * pointer
Definition: rapidxml_iterators.hpp:103
rapidxml::node_iterator::reference
typename xml_node< Ch > & reference
Definition: rapidxml_iterators.hpp:20
rapidxml::attribute_iterator::operator++
attribute_iterator operator++(int)
Definition: rapidxml_iterators.hpp:138
rapidxml::attribute_iterator::operator==
bool operator==(const attribute_iterator< Ch > &rhs)
Definition: rapidxml_iterators.hpp:162
rapidxml::attribute_iterator::operator*
reference operator*() const
Definition: rapidxml_iterators.hpp:116
rapidxml::attribute_iterator::operator++
attribute_iterator & operator++()
Definition: rapidxml_iterators.hpp:130
rapidxml::attribute_iterator::attribute_iterator
attribute_iterator()
Definition: rapidxml_iterators.hpp:107
rapidxml::attribute_iterator::operator!=
bool operator!=(const attribute_iterator< Ch > &rhs)
Definition: rapidxml_iterators.hpp:168
rapidxml::node_iterator::value_type
typename xml_node< Ch > value_type
Definition: rapidxml_iterators.hpp:19
rapidxml::node_iterator::operator--
node_iterator operator--(int)
Definition: rapidxml_iterators.hpp:72
rapidxml::xml_attribute
Class representing attribute node of XML document.
Definition: rapidxml.hpp:142
rapidxml::attribute_iterator::difference_type
std::ptrdiff_t difference_type
Definition: rapidxml_iterators.hpp:104
rapidxml::attribute_iterator::attribute_iterator
attribute_iterator(xml_node< Ch > *node)
Definition: rapidxml_iterators.hpp:111
rapidxml
Definition: rapidxml.hpp:62
rapidxml::node_iterator::operator--
node_iterator & operator--()
Definition: rapidxml_iterators.hpp:64
rapidxml::attribute_iterator::reference
typename xml_attribute< Ch > & reference
Definition: rapidxml_iterators.hpp:102
rapidxml::node_iterator
Iterator of child nodes of xml_node.
Definition: rapidxml_iterators.hpp:15
rapidxml::node_iterator::operator*
reference operator*() const
Definition: rapidxml_iterators.hpp:34
rapidxml::node_iterator::operator++
node_iterator & operator++()
Definition: rapidxml_iterators.hpp:48
rapidxml::node_iterator::operator->
pointer operator->() const
Definition: rapidxml_iterators.hpp:41
rapidxml::node_iterator::operator++
node_iterator operator++(int)
Definition: rapidxml_iterators.hpp:56
rapidxml::node_iterator::difference_type
std::ptrdiff_t difference_type
Definition: rapidxml_iterators.hpp:22
rapidxml::node_iterator::pointer
typename xml_node< Ch > * pointer
Definition: rapidxml_iterators.hpp:21
rapidxml::xml_node
Class representing a node of XML document.
Definition: rapidxml.hpp:140
rapidxml::attribute_iterator::operator--
attribute_iterator operator--(int)
Definition: rapidxml_iterators.hpp:154
rapidxml::attribute_iterator::operator--
attribute_iterator & operator--()
Definition: rapidxml_iterators.hpp:146
rapidxml::attribute_iterator::operator->
pointer operator->() const
Definition: rapidxml_iterators.hpp:123
rapidxml.hpp
rapidxml::node_iterator::iterator_category
std::bidirectional_iterator_tag iterator_category
Definition: rapidxml_iterators.hpp:23
rapidxml::attribute_iterator::iterator_category
std::bidirectional_iterator_tag iterator_category
Definition: rapidxml_iterators.hpp:105