GCC Code Coverage Report


Directory: src/gate/
File: src/gate/encode/cxx_xml.cpp
Date: 2025-09-22 22:57:09
Exec Total Coverage
Lines: 26 126 20.6%
Functions: 7 34 20.6%
Branches: 7 78 9.0%

Line Branch Exec Source
1 /* GATE PROJECT LICENSE:
2 +----------------------------------------------------------------------------+
3 | Copyright(c) 2018-2025, Stefan Meislinger <sm@opengate.at> |
4 | All rights reserved. |
5 | |
6 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met:|
8 | |
9 | 1. Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. |
11 | 2. Redistributions in binary form must reproduce the above copyright |
12 | notice, this list of conditions and the following disclaimer in the |
13 | documentation and/or other materials provided with the distribution. |
14 | |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"|
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 | ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
25 | THE POSSIBILITY OF SUCH DAMAGE. |
26 +----------------------------------------------------------------------------+
27 */
28 #include "gate/encode/xml.hpp"
29 #include "gate/exceptions.hpp"
30
31 namespace gate
32 {
33 namespace enc
34 {
35
36 ✗ XmlNode::XmlNode()
37 {
38 ✗ gate_mem_clear(&this->impl, sizeof(this->impl));
39 ✗ }
40
41 3 XmlNode::XmlNode(enumint_t nodeType, String const& tag)
42 {
43 3 result_t result = gate_xml_node_create(&this->impl, nodeType, tag.c_impl(), NULL, NULL, NULL);
44
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
3 GATEXX_CHECK_ERROR(result);
45 3 }
46
47
48 ✗ XmlNode::XmlNode(gate_xml_node_t const* node)
49 {
50 ✗ result_t result = gate_xml_node_create(&this->impl, node->node_type, &node->tag,
51 &node->attributes, &node->child_nodes, &node->content);
52 ✗ GATEXX_CHECK_ERROR(result);
53 ✗ }
54
55 ✗ XmlNode::XmlNode(XmlNode const& src)
56 {
57 ✗ if (NULL == gate_xml_node_duplicate(&this->impl, &src.impl))
58 {
59 ✗ GATEXX_RAISE_ERROR(results::OutOfMemory);
60 }
61 ✗ }
62
63 ✗ XmlNode& XmlNode::operator=(XmlNode const& src)
64 {
65 ✗ if (this != &src)
66 {
67 gate_xml_node_t new_node;
68 ✗ if (NULL == gate_xml_node_duplicate(&new_node, &src.impl))
69 {
70 ✗ GATEXX_RAISE_ERROR(results::OutOfMemory);
71 }
72 }
73 ✗ return *this;
74 }
75
76
77 6 XmlNode::~XmlNode() noexcept
78 {
79 3 gate_xml_node_destroy(&this->impl);
80 3 }
81
82 ✗ enumint_t XmlNode::getNodeType() const
83 {
84 ✗ return this->impl.node_type;
85 }
86
87 ✗ String XmlNode::getTag() const
88 {
89 ✗ return String::duplicate(this->impl.tag);
90 }
91
92 ✗ size_t XmlNode::getAttributeCount() const
93 {
94 ✗ return gate_xml_node_attribute_count(&this->impl);
95 }
96
97 ✗ String XmlNode::getAttribute(String const& name) const
98 {
99 ✗ gate_string_t value = GATE_STRING_INIT_EMPTY;
100 ✗ result_t result = gate_xml_node_attribute_by_name(&this->impl, name.c_impl(), &value);
101 ✗ GATEXX_CHECK_EXCEPTION(result);
102 ✗ return String::createFrom(value);
103 }
104 ✗ String XmlNode::getAttribute(String const& name, String const& altValue) const
105 {
106 ✗ gate_string_t value = GATE_STRING_INIT_EMPTY;
107 ✗ result_t result = gate_xml_node_attribute_by_name(&this->impl, name.c_impl(), &value);
108 ✗ if (GATE_FAILED(result))
109 {
110 ✗ return altValue;
111 }
112 else
113 {
114 ✗ return String::createFrom(value);
115 }
116 }
117
118
119 ✗ void XmlNode::getAttribute(size_t index, String& name, String& value) const
120 {
121 ✗ gate_string_t str_name = GATE_STRING_INIT_EMPTY;
122 ✗ gate_string_t str_value = GATE_STRING_INIT_EMPTY;
123 ✗ result_t result = gate_xml_node_attribute_by_index(&this->impl, index, &str_name, &str_value);
124 ✗ GATEXX_CHECK_EXCEPTION(result);
125 ✗ name = String::createFrom(str_name);
126 ✗ value = String::createFrom(str_value);
127 ✗ }
128
129 ✗ size_t XmlNode::getChildrenCount() const
130 {
131 ✗ return gate_xml_node_children_count(&this->impl);
132 }
133
134 ✗ XmlNode XmlNode::getChild(size_t index) const
135 {
136 ✗ XmlNode node;
137 ✗ result_t result = gate_xml_node_child(&this->impl, index, &node.impl);
138 ✗ GATEXX_CHECK_EXCEPTION(result);
139 ✗ return node;
140 }
141
142 ✗ String XmlNode::getContent() const
143 {
144 ✗ return String::duplicate(this->impl.content);
145 }
146
147 1 void XmlNode::store(Stream const& storeStream) const
148 {
149 1 result_t result = gate_xml_node_print(&this->impl, storeStream.c_impl(), 0);
150
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 GATEXX_CHECK_EXCEPTION(result);
151 1 }
152
153 1 String XmlNode::toString() const
154 {
155
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 StringStream ss;
156
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 this->store(ss);
157
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return ss.toString();
158 }
159
160 ✗ gate_xml_node_t const* XmlNode::c_impl() const noexcept
161 {
162 ✗ return &this->impl;
163 }
164
165 ✗ gate_xml_node_t* XmlNode::c_impl() noexcept
166 {
167 ✗ return &this->impl;
168 }
169
170
171
172
173 1 XmlDoc::XmlDoc()
174 {
175 1 result_t result = gate_xml_doc_create(&this->impl, NULL);
176
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 GATEXX_CHECK_ERROR(result);
177 1 }
178
179 ✗ XmlDoc::XmlDoc(XmlNode const& documentElement)
180 {
181 ✗ result_t result = gate_xml_doc_create(&this->impl, documentElement.c_impl());
182 ✗ GATEXX_CHECK_ERROR(result);
183 ✗ }
184
185 ✗ XmlDoc::XmlDoc(Stream& loadStream)
186 {
187 ✗ result_t result = gate_xml_doc_load(&this->impl, loadStream.c_impl());
188 ✗ GATEXX_CHECK_EXCEPTION(result);
189 ✗ }
190
191 1 XmlDoc::XmlDoc(String const& loadText)
192 {
193 1 result_t result = gate_xml_doc_load_text(&this->impl, loadText.c_impl());
194
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 GATEXX_CHECK_EXCEPTION(result);
195 1 }
196
197 4 XmlDoc::~XmlDoc() noexcept
198 {
199 2 gate_xml_doc_destroy(&this->impl);
200 2 }
201
202 ✗ gate_xml_doc_t* XmlDoc::c_impl() noexcept
203 {
204 ✗ return &this->impl;
205 }
206 ✗ gate_xml_doc_t const* XmlDoc::c_impl() const noexcept
207 {
208 ✗ return &this->impl;
209 }
210
211 ✗ void XmlDoc::store(Stream& saveStream, size_t indentSpaces)
212 {
213 ✗ result_t result = gate_xml_doc_store(&this->impl, saveStream.c_impl(), indentSpaces);
214 ✗ GATEXX_CHECK_EXCEPTION(result);
215 ✗ }
216
217 ✗ String XmlDoc::toString(size_t indentSpaces)
218 {
219 ✗ gate_string_t text = GATE_STRING_INIT_EMPTY;
220 ✗ result_t result = gate_xml_doc_store_text(&this->impl, &text, indentSpaces);
221 ✗ GATEXX_CHECK_ERROR(result);
222 ✗ return String::createFrom(text);
223 }
224
225 ✗ XmlNode XmlDoc::rootElement()
226 {
227 ✗ gate_xml_node_t const* ptr_node = NULL;
228 ✗ result_t result = gate_xml_doc_root_element(&this->impl, &ptr_node);
229 ✗ GATEXX_CHECK_EXCEPTION(result);
230 ✗ return XmlNode(ptr_node);
231 }
232
233 ✗ void XmlDoc::addNode(XmlNode& parentNode, XmlNode const& childNode)
234 {
235 ✗ result_t result = gate_xml_doc_add_node(&this->impl, parentNode.c_impl(), childNode.c_impl());
236 ✗ GATEXX_CHECK_EXCEPTION(result);
237 ✗ }
238
239 ✗ void XmlDoc::removeNode(XmlNode& node, size_t index)
240 {
241 ✗ result_t result = gate_xml_doc_remove_node(&this->impl, node.c_impl(), index);
242 ✗ GATEXX_CHECK_EXCEPTION(result);
243 ✗ }
244
245 ✗ void XmlDoc::addAttribute(XmlNode& node, String const& name, String const& value)
246 {
247 ✗ result_t result = gate_xml_doc_add_attribute(&this->impl, node.c_impl(), name.c_impl(), value.c_impl());
248 ✗ GATEXX_CHECK_EXCEPTION(result);
249 ✗ }
250
251 ✗ void XmlDoc::removeAttribute(XmlNode& node, String const& name)
252 {
253 ✗ result_t result = gate_xml_doc_remove_attribute(&this->impl, node.c_impl(), name.c_impl());
254 ✗ GATEXX_CHECK_EXCEPTION(result);
255 ✗ }
256 ✗ void XmlDoc::setContent(XmlNode& node, String const& content)
257 {
258 ✗ result_t result = gate_xml_doc_set_node_content(&this->impl, node.c_impl(), content.c_impl());
259 ✗ GATEXX_CHECK_EXCEPTION(result);
260 ✗ }
261
262
263 } // end of namespace enc
264 } // end of namespace gate
265