source: XIOS/dev/dev_olga/src/extern/rapidxml/include/rapidxml_iterators.hpp @ 1022

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