mirror of
https://github.com/OpenMW/openmw.git
synced 2025-07-06 00:11:34 +00:00
Use namespace instead of static class
This commit is contained in:
parent
b657cb2e4c
commit
2523afe9c2
3 changed files with 241 additions and 241 deletions
|
@ -1,5 +1,7 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include <yaml-cpp/yaml.h>
|
||||||
|
|
||||||
#include <components/lua/yamlloader.hpp>
|
#include <components/lua/yamlloader.hpp>
|
||||||
|
|
||||||
#include "../testing_util.hpp"
|
#include "../testing_util.hpp"
|
||||||
|
|
|
@ -3,29 +3,51 @@
|
||||||
#include <charconv>
|
#include <charconv>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
|
||||||
|
#include <yaml-cpp/yaml.h>
|
||||||
|
|
||||||
#include <components/misc/strings/format.hpp>
|
#include <components/misc/strings/format.hpp>
|
||||||
#include <components/misc/strings/lower.hpp>
|
#include <components/misc/strings/lower.hpp>
|
||||||
|
|
||||||
namespace LuaUtil
|
namespace LuaUtil
|
||||||
{
|
{
|
||||||
namespace
|
namespace YamlLoader
|
||||||
{
|
{
|
||||||
constexpr uint64_t maxDepth = 250;
|
constexpr uint64_t maxDepth = 250;
|
||||||
}
|
|
||||||
|
|
||||||
sol::object YamlLoader::load(const std::string& input, const sol::state_view& lua)
|
enum class ScalarType
|
||||||
{
|
{
|
||||||
std::vector<YAML::Node> rootNodes = YAML::LoadAll(input);
|
Boolean,
|
||||||
return LuaUtil::YamlLoader::load(rootNodes, lua);
|
Decimal,
|
||||||
}
|
Float,
|
||||||
|
Hexadecimal,
|
||||||
|
Infinity,
|
||||||
|
NotNumber,
|
||||||
|
Null,
|
||||||
|
Octal,
|
||||||
|
String
|
||||||
|
};
|
||||||
|
|
||||||
sol::object YamlLoader::load(std::istream& input, const sol::state_view& lua)
|
sol::object load(const std::vector<YAML::Node>& rootNodes, const sol::state_view& lua);
|
||||||
|
|
||||||
|
sol::object getNode(const YAML::Node& node, const sol::state_view& lua, uint64_t depth);
|
||||||
|
|
||||||
|
sol::table getMap(const YAML::Node& node, const sol::state_view& lua, uint64_t depth);
|
||||||
|
|
||||||
|
sol::table getArray(const YAML::Node& node, const sol::state_view& lua, uint64_t depth);
|
||||||
|
|
||||||
|
ScalarType getScalarType(const YAML::Node& node);
|
||||||
|
|
||||||
|
sol::object getScalar(const YAML::Node& node, const sol::state_view& lua);
|
||||||
|
|
||||||
|
[[noreturn]] void nodeError(const YAML::Node& node, const std::string& message);
|
||||||
|
|
||||||
|
sol::object load(const std::string& input, const sol::state_view& lua)
|
||||||
{
|
{
|
||||||
std::vector<YAML::Node> rootNodes = YAML::LoadAll(input);
|
std::vector<YAML::Node> rootNodes = YAML::LoadAll(input);
|
||||||
return load(rootNodes, lua);
|
return load(rootNodes, lua);
|
||||||
}
|
}
|
||||||
|
|
||||||
sol::object YamlLoader::load(const std::vector<YAML::Node>& rootNodes, const sol::state_view& lua)
|
sol::object load(const std::vector<YAML::Node>& rootNodes, const sol::state_view& lua)
|
||||||
{
|
{
|
||||||
if (rootNodes.empty())
|
if (rootNodes.empty())
|
||||||
return sol::nil;
|
return sol::nil;
|
||||||
|
@ -42,7 +64,13 @@ namespace LuaUtil
|
||||||
return documentsTable;
|
return documentsTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
sol::object YamlLoader::getNode(const YAML::Node& node, const sol::state_view& lua, uint64_t depth)
|
sol::object load(std::istream& input, const sol::state_view& lua)
|
||||||
|
{
|
||||||
|
std::vector<YAML::Node> rootNodes = YAML::LoadAll(input);
|
||||||
|
return load(rootNodes, lua);
|
||||||
|
}
|
||||||
|
|
||||||
|
sol::object getNode(const YAML::Node& node, const sol::state_view& lua, uint64_t depth)
|
||||||
{
|
{
|
||||||
if (depth >= maxDepth)
|
if (depth >= maxDepth)
|
||||||
throw std::runtime_error("Maximum layers depth exceeded, probably caused by a circular reference");
|
throw std::runtime_error("Maximum layers depth exceeded, probably caused by a circular reference");
|
||||||
|
@ -61,7 +89,7 @@ namespace LuaUtil
|
||||||
nodeError(node, "An unknown YAML node encountered");
|
nodeError(node, "An unknown YAML node encountered");
|
||||||
}
|
}
|
||||||
|
|
||||||
sol::table YamlLoader::getMap(const YAML::Node& node, const sol::state_view& lua, uint64_t depth)
|
sol::table getMap(const YAML::Node& node, const sol::state_view& lua, uint64_t depth)
|
||||||
{
|
{
|
||||||
sol::table childTable(lua, sol::create);
|
sol::table childTable(lua, sol::create);
|
||||||
|
|
||||||
|
@ -84,7 +112,7 @@ namespace LuaUtil
|
||||||
return childTable;
|
return childTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
sol::table YamlLoader::getArray(const YAML::Node& node, const sol::state_view& lua, uint64_t depth)
|
sol::table getArray(const YAML::Node& node, const sol::state_view& lua, uint64_t depth)
|
||||||
{
|
{
|
||||||
sol::table childTable(lua, sol::create);
|
sol::table childTable(lua, sol::create);
|
||||||
|
|
||||||
|
@ -96,7 +124,7 @@ namespace LuaUtil
|
||||||
return childTable;
|
return childTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
YamlLoader::ScalarType YamlLoader::getScalarType(const YAML::Node& node)
|
ScalarType getScalarType(const YAML::Node& node)
|
||||||
{
|
{
|
||||||
const auto& tag = node.Tag();
|
const auto& tag = node.Tag();
|
||||||
const auto& value = node.Scalar();
|
const auto& value = node.Scalar();
|
||||||
|
@ -152,7 +180,7 @@ namespace LuaUtil
|
||||||
return ScalarType::String;
|
return ScalarType::String;
|
||||||
}
|
}
|
||||||
|
|
||||||
sol::object YamlLoader::getScalar(const YAML::Node& node, const sol::state_view& lua)
|
sol::object getScalar(const YAML::Node& node, const sol::state_view& lua)
|
||||||
{
|
{
|
||||||
auto type = getScalarType(node);
|
auto type = getScalarType(node);
|
||||||
const auto& value = node.Scalar();
|
const auto& value = node.Scalar();
|
||||||
|
@ -230,12 +258,12 @@ namespace LuaUtil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[[noreturn]] void YamlLoader::nodeError(const YAML::Node& node, const std::string& message)
|
[[noreturn]] void nodeError(const YAML::Node& node, const std::string& message)
|
||||||
{
|
{
|
||||||
const auto& mark = node.Mark();
|
const auto& mark = node.Mark();
|
||||||
std::string error = Misc::StringUtils::format(
|
std::string error = Misc::StringUtils::format(
|
||||||
" at line=%d column=%d position=%d", mark.line + 1, mark.column + 1, mark.pos + 1);
|
" at line=%d column=%d position=%d", mark.line + 1, mark.column + 1, mark.pos + 1);
|
||||||
throw std::runtime_error(message + error);
|
throw std::runtime_error(message + error);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,46 +2,16 @@
|
||||||
#define COMPONENTS_LUA_YAMLLOADER_H
|
#define COMPONENTS_LUA_YAMLLOADER_H
|
||||||
|
|
||||||
#include <sol/sol.hpp>
|
#include <sol/sol.hpp>
|
||||||
#include <yaml-cpp/yaml.h>
|
|
||||||
|
|
||||||
namespace LuaUtil
|
namespace LuaUtil
|
||||||
{
|
{
|
||||||
|
|
||||||
class YamlLoader
|
namespace YamlLoader
|
||||||
{
|
{
|
||||||
public:
|
sol::object load(const std::string& input, const sol::state_view& lua);
|
||||||
static sol::object load(const std::string& input, const sol::state_view& lua);
|
|
||||||
|
|
||||||
static sol::object load(std::istream& input, const sol::state_view& lua);
|
sol::object load(std::istream& input, const sol::state_view& lua);
|
||||||
|
}
|
||||||
private:
|
|
||||||
enum class ScalarType
|
|
||||||
{
|
|
||||||
Boolean,
|
|
||||||
Decimal,
|
|
||||||
Float,
|
|
||||||
Hexadecimal,
|
|
||||||
Infinity,
|
|
||||||
NotNumber,
|
|
||||||
Null,
|
|
||||||
Octal,
|
|
||||||
String
|
|
||||||
};
|
|
||||||
|
|
||||||
static sol::object load(const std::vector<YAML::Node>& rootNodes, const sol::state_view& lua);
|
|
||||||
|
|
||||||
static sol::object getNode(const YAML::Node& node, const sol::state_view& lua, uint64_t depth);
|
|
||||||
|
|
||||||
static sol::table getMap(const YAML::Node& node, const sol::state_view& lua, uint64_t depth);
|
|
||||||
|
|
||||||
static sol::table getArray(const YAML::Node& node, const sol::state_view& lua, uint64_t depth);
|
|
||||||
|
|
||||||
static ScalarType getScalarType(const YAML::Node& node);
|
|
||||||
|
|
||||||
static sol::object getScalar(const YAML::Node& node, const sol::state_view& lua);
|
|
||||||
|
|
||||||
[[noreturn]] static void nodeError(const YAML::Node& node, const std::string& message);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue