From a508a0faf8c09fc23ddecb1df3044045f3835e0f Mon Sep 17 00:00:00 2001 From: David Cernat Date: Sun, 24 Feb 2019 01:43:04 +0200 Subject: [PATCH] [Server] Turn GetArguments() from ScriptFunctions into Utils function --- apps/openmw-mp/Script/Functions/Timer.cpp | 2 +- apps/openmw-mp/Script/ScriptFunctions.cpp | 58 +-------------------- apps/openmw-mp/Script/ScriptFunctions.hpp | 1 - apps/openmw-mp/Utils.cpp | 62 +++++++++++++++++++++-- apps/openmw-mp/Utils.hpp | 8 +-- 5 files changed, 64 insertions(+), 67 deletions(-) diff --git a/apps/openmw-mp/Script/Functions/Timer.cpp b/apps/openmw-mp/Script/Functions/Timer.cpp index 2ec0e131a..fb8cae5a0 100644 --- a/apps/openmw-mp/Script/Functions/Timer.cpp +++ b/apps/openmw-mp/Script/Functions/Timer.cpp @@ -21,7 +21,7 @@ int ScriptFunctions::CreateTimerEx(ScriptFunc callback, int msec, const char *ty try { vector params; - GetArguments(params, args, types); + Utils::getArguments(params, args, types); return mwmp::TimerAPI::CreateTimer(callback, msec, types, params); } diff --git a/apps/openmw-mp/Script/ScriptFunctions.cpp b/apps/openmw-mp/Script/ScriptFunctions.cpp index 776b72353..67fd7cca0 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.cpp +++ b/apps/openmw-mp/Script/ScriptFunctions.cpp @@ -13,62 +13,6 @@ constexpr ScriptCallbackData ScriptFunctions::callbacks[]; using namespace std; -void ScriptFunctions::GetArguments(std::vector ¶ms, va_list args, const std::string &def) -{ - params.reserve(def.length()); - - try - { - for (char c : def) - { - switch (c) - { - case 'i': - params.emplace_back(va_arg(args, unsigned int)); - break; - - case 'q': - params.emplace_back(va_arg(args, signed int)); - break; - - case 'l': - params.emplace_back(va_arg(args, unsigned long long)); - break; - - case 'w': - params.emplace_back(va_arg(args, signed long long)); - break; - - case 'f': - params.emplace_back(va_arg(args, double)); - break; - - case 'p': - params.emplace_back(va_arg(args, void*)); - break; - - case 's': - params.emplace_back(va_arg(args, const char*)); - break; - - case 'b': - params.emplace_back(va_arg(args, int)); - break; - - default: - throw runtime_error("C++ call: Unknown argument identifier " + c); - } - } - } - - catch (...) - { - va_end(args); - throw; - } - va_end(args); -} - void ScriptFunctions::MakePublic(ScriptFunc _public, const char *name, char ret_type, const char *def) noexcept { Public::MakePublic(_public, name, ret_type, def); @@ -81,7 +25,7 @@ boost::any ScriptFunctions::CallPublic(const char *name, va_list args) noexcept try { string def = Public::GetDefinition(name); - GetArguments(params, args, def); + Utils::getArguments(params, args, def); return Public::Call(name, params); } diff --git a/apps/openmw-mp/Script/ScriptFunctions.hpp b/apps/openmw-mp/Script/ScriptFunctions.hpp index 6cd590a8f..0306dc748 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.hpp +++ b/apps/openmw-mp/Script/ScriptFunctions.hpp @@ -47,7 +47,6 @@ class ScriptFunctions { public: - static void GetArguments(std::vector ¶ms, va_list args, const std::string &def); static void MakePublic(ScriptFunc _public, const char *name, char ret_type, const char *def) noexcept; static boost::any CallPublic(const char *name, va_list args) noexcept; diff --git a/apps/openmw-mp/Utils.cpp b/apps/openmw-mp/Utils.cpp index d5d621e49..3019a2d20 100644 --- a/apps/openmw-mp/Utils.cpp +++ b/apps/openmw-mp/Utils.cpp @@ -1,9 +1,7 @@ -// -// Created by koncord on 04.03.17. -// - #include "Utils.hpp" +#include + using namespace std; const vector Utils::split(const string &str, int delimiter) @@ -52,3 +50,59 @@ ESM::Cell Utils::getCellFromDescription(std::string cellDescription) return cell; } + +void Utils::getArguments(std::vector ¶ms, va_list args, const std::string &def) +{ + params.reserve(def.length()); + + try + { + for (char c : def) + { + switch (c) + { + case 'i': + params.emplace_back(va_arg(args, unsigned int)); + break; + + case 'q': + params.emplace_back(va_arg(args, signed int)); + break; + + case 'l': + params.emplace_back(va_arg(args, unsigned long long)); + break; + + case 'w': + params.emplace_back(va_arg(args, signed long long)); + break; + + case 'f': + params.emplace_back(va_arg(args, double)); + break; + + case 'p': + params.emplace_back(va_arg(args, void*)); + break; + + case 's': + params.emplace_back(va_arg(args, const char*)); + break; + + case 'b': + params.emplace_back(va_arg(args, int)); + break; + + default: + throw runtime_error("C++ call: Unknown argument identifier " + c); + } + } + } + + catch (...) + { + va_end(args); + throw; + } + va_end(args); +} diff --git a/apps/openmw-mp/Utils.hpp b/apps/openmw-mp/Utils.hpp index b511a5b10..1454239bd 100644 --- a/apps/openmw-mp/Utils.hpp +++ b/apps/openmw-mp/Utils.hpp @@ -1,7 +1,3 @@ -// -// Created by koncord on 04.03.17. -// - #ifndef OPENMW_UTILS_HPP #define OPENMW_UTILS_HPP @@ -9,6 +5,8 @@ #include #include +#include + #include #include @@ -27,6 +25,8 @@ namespace Utils ESM::Cell getCellFromDescription(std::string cellDescription); + void getArguments(std::vector ¶ms, va_list args, const std::string &def); + template constexpr unsigned int hash(const char(&str)[N], size_t I = N) {