5#include <libxml/parser.h>
20[[nodiscard]] T
GetXmlAttr(xmlNodePtr
node,
const char* attrName,
const T &defaultValue = T{})
21 noexcept(std::is_arithmetic_v<T>)
30 std::string_view
sv(
reinterpret_cast<const char*
>(raw));
34 if constexpr (std::is_same_v<T, std::string>) {
36 }
else if constexpr (std::is_arithmetic_v<T>) {
38 auto [
ptr, ec] = std::from_chars(
sv.data(),
sv.data() +
sv.size(), result);
41 if (ec != std::errc{}) {
46 static_assert(
false,
"Type not implemented");
65 std::string_view sv(
reinterpret_cast<const char*
>(raw));
68 if constexpr (std::is_same_v<T, std::string>) {
69 value = std::string(sv);
70 }
else if constexpr (std::is_arithmetic_v<T>) {
72 auto [ptr, ec] = std::from_chars(sv.data(), sv.data() + sv.size(), value);
73 if (ec != std::errc{}){
75 throw std::runtime_error(
"Cannot read value");
79 static_assert(
false,
"Type not implemented");
87template <
typename X,
typename COL>
97 std::string_view sv(
reinterpret_cast<const char*
>(raw));
100 if constexpr (std::is_same_v<X, std::string>) {
102 }
else if constexpr (std::is_arithmetic_v<X>) {
104 auto [ptr, ec] = std::from_chars(sv.data(), sv.data() + sv.size(),
result);
105 if (ec != std::errc{}){
107 throw std::runtime_error(
"Cannot read value");
111 static_assert(
false,
"Type not implemented");
116 collection.emplace(attrName, std::move(
result));
119template <
typename X,
typename COL>
123 xmlChar* raw = xmlGetProp(
node, BAD_CAST attrName);
129 std::string_view sv(
reinterpret_cast<const char*
>(raw));
132 if constexpr (std::is_same_v<X, std::string>) {
134 }
else if constexpr (std::is_arithmetic_v<X>) {
136 auto [ptr, ec] = std::from_chars(sv.data(), sv.data() + sv.size(),
result);
137 if (ec != std::errc{}){
139 throw std::runtime_error(
"Cannot read value");
143 static_assert(
false,
"Type not implemented");
148 collection.emplace_back(std::move(
result));
Define macros for attributes used to control the static checker.
#define ATLAS_NO_CHECK_FILE_THREAD_SAFETY
void AddXmlToCollectionMap(xmlNodePtr node, const char *attrName, COL &collection)
void AddXmlToCollection(xmlNodePtr node, const char *attrName, COL &collection)
void GetXmlAttrIfThere(xmlNodePtr node, const char *attrName, T &value)
T GetXmlAttr(xmlNodePtr node, const char *attrName, const T &defaultValue=T{}) noexcept(std::is_arithmetic_v< T >)