Skip to content

Commit ec6ab3b

Browse files
Improved support for string_views for TOML and XML (#445)
* Improved support for string_views for TOML and XML * Upgrade to pugixml 1.15 in order to be able to use string views
1 parent c600b9a commit ec6ab3b

File tree

5 files changed

+18
-25
lines changed

5 files changed

+18
-25
lines changed

conanfile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def requirements(self):
8282
if self.options.with_toml:
8383
self.requires("tomlplusplus/3.4.0", transitive_headers=True)
8484
if self.options.with_xml:
85-
self.requires("pugixml/1.14", transitive_headers=True)
85+
self.requires("pugixml/1.15", transitive_headers=True)
8686
if self.options.with_yaml:
8787
self.requires("yaml-cpp/0.8.0", transitive_headers=True)
8888

include/rfl/toml/read.hpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <istream>
55
#include <string>
6+
#include <string_view>
67
#include <toml++/toml.hpp>
78

89
#include "../Processors.hpp"
@@ -25,18 +26,12 @@ auto read(InputVarType _var) {
2526
return Parser<T, ProcessorsType>::read(r, _var);
2627
}
2728

28-
/// Reads a TOML string.
29-
template <class T, class... Ps>
30-
Result<internal::wrap_in_rfl_array_t<T>> read(const std::string& _toml_str) {
31-
auto table = ::toml::parse(_toml_str);
32-
return read<T, Ps...>(&table);
33-
}
34-
3529
/// Reads a TOML string.
3630
template <class T, class... Ps>
3731
Result<internal::wrap_in_rfl_array_t<T>> read(
3832
const std::string_view _toml_str) {
39-
return read<T, Ps...>(std::string(_toml_str));
33+
auto table = ::toml::parse(_toml_str);
34+
return read<T, Ps...>(&table);
4035
}
4136

4237
/// Parses an object from a stringstream.

include/rfl/xml/read.hpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
#include "Parser.hpp"
1313
#include "Reader.hpp"
1414

15-
namespace rfl {
16-
namespace xml {
15+
namespace rfl ::xml {
1716

1817
using InputVarType = typename Reader::InputVarType;
1918

@@ -32,7 +31,7 @@ auto read(const InputVarType& _var) {
3231
template <class T, class... Ps>
3332
Result<T> read(const std::string_view _xml_str) {
3433
pugi::xml_document doc;
35-
const auto result = doc.load_string(_xml_str.data());
34+
const auto result = doc.load_buffer(_xml_str.data(), _xml_str.size());
3635
if (!result) {
3736
return error("XML string could not be parsed: " +
3837
std::string(result.description()));
@@ -49,7 +48,6 @@ auto read(std::istream& _stream) {
4948
return read<T, Ps...>(xml_str);
5049
}
5150

52-
} // namespace xml
53-
} // namespace rfl
51+
} // namespace rfl::xml
5452

5553
#endif

src/rfl/xml/Writer.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ Writer::OutputArrayType Writer::add_array_to_object(
7878

7979
Writer::OutputVarType Writer::add_value_to_array_impl(
8080
const std::string& _str, OutputArrayType* _parent) const noexcept {
81-
auto node_child = Ref<pugi::xml_node>::make(
82-
_parent->node_->append_child(_parent->name_.data()));
81+
auto node_child =
82+
Ref<pugi::xml_node>::make(_parent->node_->append_child(_parent->name_));
8383
node_child->append_child(pugi::node_pcdata).set_value(_str.c_str());
8484
return OutputVarType(node_child);
8585
}
@@ -88,38 +88,38 @@ Writer::OutputVarType Writer::add_value_to_object_impl(
8888
const std::string_view& _name, const std::string& _str,
8989
OutputObjectType* _parent, const bool _is_attribute) const noexcept {
9090
if (_is_attribute) {
91-
_parent->node_->append_attribute(_name.data()) = _str.c_str();
91+
_parent->node_->append_attribute(_name) = _str.c_str();
9292
return OutputVarType(_parent->node_);
9393
} else if (_name == XML_CONTENT) {
9494
_parent->node_->append_child(pugi::node_pcdata).set_value(_str.c_str());
9595
return OutputVarType(_parent->node_);
9696
} else {
9797
auto node_child =
98-
Ref<pugi::xml_node>::make(_parent->node_->append_child(_name.data()));
98+
Ref<pugi::xml_node>::make(_parent->node_->append_child(_name));
9999
node_child->append_child(pugi::node_pcdata).set_value(_str.c_str());
100100
return OutputVarType(node_child);
101101
}
102102
}
103103

104104
Writer::OutputObjectType Writer::add_object_to_array(
105105
const size_t _size, OutputArrayType* _parent) const noexcept {
106-
auto node_child = Ref<pugi::xml_node>::make(
107-
_parent->node_->append_child(_parent->name_.data()));
106+
auto node_child =
107+
Ref<pugi::xml_node>::make(_parent->node_->append_child(_parent->name_));
108108
return OutputObjectType(node_child);
109109
}
110110

111111
Writer::OutputObjectType Writer::add_object_to_object(
112112
const std::string_view& _name, const size_t _size,
113113
OutputObjectType* _parent) const noexcept {
114114
auto node_child =
115-
Ref<pugi::xml_node>::make(_parent->node_->append_child(_name.data()));
115+
Ref<pugi::xml_node>::make(_parent->node_->append_child(_name));
116116
return OutputObjectType(node_child);
117117
}
118118

119119
Writer::OutputVarType Writer::add_null_to_array(
120120
OutputArrayType* _parent) const noexcept {
121-
auto node_child = Ref<pugi::xml_node>::make(
122-
_parent->node_->append_child(_parent->name_.data()));
121+
auto node_child =
122+
Ref<pugi::xml_node>::make(_parent->node_->append_child(_parent->name_));
123123
return OutputVarType(node_child);
124124
}
125125

@@ -132,7 +132,7 @@ Writer::OutputVarType Writer::add_null_to_object(
132132
return OutputVarType(_parent->node_);
133133
} else {
134134
auto node_child =
135-
Ref<pugi::xml_node>::make(_parent->node_->append_child(_name.data()));
135+
Ref<pugi::xml_node>::make(_parent->node_->append_child(_name));
136136
return OutputVarType(node_child);
137137
}
138138
}

vcpkg.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@
142142
"dependencies": [
143143
{
144144
"name": "pugixml",
145-
"version>=": "1.14"
145+
"version>=": "1.15"
146146
}
147147
]
148148
},

0 commit comments

Comments
 (0)