mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-11-25 15:15:40 +00:00
Added Util::Config::Node::ValueAsUnsigned() with support for base 10 and 16 ('0x' prefix)
This commit is contained in:
parent
331d7042f2
commit
52d6eac7e5
|
@ -71,6 +71,7 @@
|
|||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <queue>
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
namespace Util
|
||||
|
@ -79,6 +80,13 @@ namespace Util
|
|||
{
|
||||
Node Node::s_empty_node;
|
||||
|
||||
uint64_t Node::ValueAsUnsigned() const
|
||||
{
|
||||
if (m_value.find("0x") == 0 || m_value.find("0X") == 0)
|
||||
return strtoull(m_value.c_str() + 2, 0, 16);
|
||||
return strtoull(m_value.c_str(), 0, 10);
|
||||
}
|
||||
|
||||
const Node &Node::operator[](const std::string &path) const
|
||||
{
|
||||
const Node *e = this;
|
||||
|
@ -171,18 +179,6 @@ namespace Util
|
|||
parent.m_children[node->m_key] = node;
|
||||
}
|
||||
|
||||
/*
|
||||
void Node::Clear()
|
||||
{
|
||||
m_next_sibling.reset();
|
||||
m_first_child.reset();
|
||||
m_last_child.reset();
|
||||
m_children.clear();
|
||||
m_key.clear();
|
||||
m_value.clear();
|
||||
}
|
||||
*/
|
||||
|
||||
Node::Node()
|
||||
{
|
||||
//std::cout << "Created " << "<null>" << " (" << this << ")" << std::endl;
|
||||
|
@ -301,14 +297,12 @@ namespace Util
|
|||
size_t idx_equals = line.find_first_of('=');
|
||||
if (idx_equals == std::string::npos)
|
||||
{
|
||||
//std::cerr << filename << ':' << line_num << ": Syntax error. No '=' found." << std::endl;
|
||||
ErrorLog("%s:%d: Syntax error. No '=' found.", filename.c_str(), line_num);
|
||||
return;
|
||||
}
|
||||
std::string lvalue(TrimWhiteSpace(std::string(line.begin(), line.begin() + idx_equals)));
|
||||
if (lvalue.empty())
|
||||
{
|
||||
//std::cerr << filename << ':' << line_num << ": Syntax error. Setting name missing before '='." << std::endl;
|
||||
ErrorLog("%s:%d: Syntax error. Setting name missing before '='.", filename.c_str(), line_num);
|
||||
return;
|
||||
}
|
||||
|
@ -321,7 +315,6 @@ namespace Util
|
|||
rvalue = std::string(rvalue.begin() + idx_first_quote + 1, rvalue.begin() + idx_last_quote);
|
||||
if (std::count(rvalue.begin(), rvalue.end(), '\"') != 0)
|
||||
{
|
||||
//std::cerr << filename << ':' << line_num << ": Warning: Extraneous quotes present on line." << std::endl;
|
||||
ErrorLog("%s:%d: Warning: Extraneous quotes present on line.", filename.c_str(), line_num);
|
||||
}
|
||||
// In INI files, we do not allow multiple settings with the same key. If
|
||||
|
@ -412,12 +405,6 @@ namespace Util
|
|||
{
|
||||
// INI semantics: take care to only create a single setting per key
|
||||
merged.Set(key, value);
|
||||
/*
|
||||
if (merged[key].Empty())
|
||||
merged.Add(key, value);
|
||||
else
|
||||
merged.Get(key).SetValue(value);
|
||||
*/
|
||||
}
|
||||
}
|
||||
// Merge in settings from section y
|
||||
|
@ -428,12 +415,6 @@ namespace Util
|
|||
if (it->IsLeaf())
|
||||
{
|
||||
merged.Set(key, value);
|
||||
/*
|
||||
if (merged[key].Empty())
|
||||
merged.Add(key, value);
|
||||
else
|
||||
merged.Get(key).SetValue(value);
|
||||
*/
|
||||
}
|
||||
}
|
||||
return merged_ptr;
|
||||
|
|
|
@ -161,6 +161,8 @@ namespace Util
|
|||
return m_value;
|
||||
}
|
||||
|
||||
uint64_t ValueAsUnsigned() const;
|
||||
|
||||
inline void SetValue(const std::string &value)
|
||||
{
|
||||
if (this != &s_empty_node) // not allowed to modify empty node
|
||||
|
@ -172,6 +174,11 @@ namespace Util
|
|||
return m_key.empty();
|
||||
}
|
||||
|
||||
inline bool Exists() const
|
||||
{
|
||||
return !Empty();
|
||||
}
|
||||
|
||||
inline bool IsLeaf() const
|
||||
{
|
||||
return m_children.empty();
|
||||
|
|
Loading…
Reference in a new issue