iotivity 0.9.0
[platform/upstream/iotivity.git] / service / soft-sensor-manager / SSMCore / src / Common / rapidxml_iterators.hpp
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
11 namespace 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