From 4763f258b3a8b869eb07986cfbc3791409e331fb Mon Sep 17 00:00:00 2001 From: Barinade Date: Tue, 29 Aug 2023 10:29:08 -0500 Subject: [PATCH] add php bindings to calc behind define --- src/Etterna/MinaCalc/MinaCalc.cpp | 94 +++++++++++++++++++++++++++++++ src/Etterna/MinaCalc/Ulbu.h | 4 +- src/Etterna/MinaCalc/UlbuBase.h | 2 +- 3 files changed, 97 insertions(+), 3 deletions(-) diff --git a/src/Etterna/MinaCalc/MinaCalc.cpp b/src/Etterna/MinaCalc/MinaCalc.cpp index b80baff443..b5af8feec3 100644 --- a/src/Etterna/MinaCalc/MinaCalc.cpp +++ b/src/Etterna/MinaCalc/MinaCalc.cpp @@ -12,6 +12,10 @@ #include #include +#if defined(PHPCALC) +#include +#endif + using std::max; using std::min; using std::pow; @@ -990,3 +994,93 @@ GetCalcVersion() -> int { return mina_calc_version; } + +#if defined(PHPCALC) +#include +#include + +Php::Value +calculator_version() +{ + return GetCalcVersion(); +} + +Php::Value +webcalc(Php::Parameters& parameters) +{ + + std::string contents = parameters[0]; + const double rate = parameters[1]; + const double wife = parameters[2]; + + std::vector newVector; + std::istringstream stream; + stream.str(std::move(contents)); + + stream.seekg(0, std::ios::end); + auto n = stream.tellg(); + + newVector.resize(n / sizeof(NoteInfo)); + stream.seekg(0, std::ios::beg); + stream.read((char*)&newVector[0], newVector.capacity() * sizeof(NoteInfo)); + + thread_local auto calc = std::make_unique(); + std::vector ssr = dimples_the_all_zero_output; + if (newVector.size() > 1) { + + try { + ssr = calc->CalcMain(newVector, rate, min(wife, ssr_goal_cap)); + } catch (std::exception& e) { + throw Php::Exception(e.what()); + } + + // ssr = calc->CalcMain(newVector, rate, min(wife, 0.965)); + } + + Php::Value assoc; + assoc["Overall"] = ssr[0]; + assoc["Stream"] = ssr[1]; + assoc["Jumpstream"] = ssr[2]; + assoc["Handstream"] = ssr[3]; + assoc["Stamina"] = ssr[4]; + assoc["JackSpeed"] = ssr[5]; + assoc["Chordjack"] = ssr[6]; + assoc["Technical"] = ssr[7]; + + return assoc; +} + +extern "C" { +PHPCPP_EXPORT void* +get_module() +{ + + bool stable = true + + if (stable) + { + static Php::Extension myExtension( + "stable_calc", std::to_string(GetCalcVersion()).c_str()); + myExtension.add("stableWebCalc", + { Php::ByVal("a", Php::Type::String), + Php::ByVal("b", Php::Type::Float), + Php::ByVal("c", Php::Type::Float), + Php::ByVal("d", Php::Type::Numeric) }); + myExtension.add("stableCalcVersion"); + return myExtension; + } + else + { + static Php::Extension myExtension( + "testing_calc", std::to_string(GetCalcVersion()).c_str()); + myExtension.add("testingWebCalc", + { Php::ByVal("a", Php::Type::String), + Php::ByVal("b", Php::Type::Float), + Php::ByVal("c", Php::Type::Float) + .Php::ByVal("d", Php::Type::Numeric) }); + myExtension.add("testingCalcVersion"); + return myExtension; + } +} +} +#endif diff --git a/src/Etterna/MinaCalc/Ulbu.h b/src/Etterna/MinaCalc/Ulbu.h index ef633d9141..89b77e1cfc 100644 --- a/src/Etterna/MinaCalc/Ulbu.h +++ b/src/Etterna/MinaCalc/Ulbu.h @@ -1,6 +1,6 @@ #pragma once -#ifndef STANDALONE_CALC +#if !defined(STANDALONE_CALC) && !defined(PHPCALC) // stepmania garbage #include "../FileTypes/XmlFile.h" #include "../FileTypes/XmlFileUtil.h" @@ -665,7 +665,7 @@ struct TheGreatBazoinkazoinkInTheSky : public Bazoinkazoink } #pragma endregion -#ifndef STANDALONE_CALC +#if !defined(STANDALONE_CALC) && !defined(PHPCALC) void load_calc_params_from_disk(bool bForce = false) const override { const auto fn = calc_params_xml; diff --git a/src/Etterna/MinaCalc/UlbuBase.h b/src/Etterna/MinaCalc/UlbuBase.h index b2508d7336..e023df9bff 100644 --- a/src/Etterna/MinaCalc/UlbuBase.h +++ b/src/Etterna/MinaCalc/UlbuBase.h @@ -164,7 +164,7 @@ struct Bazoinkazoink } -#ifndef STANDALONE_CALC +#if !defined(STANDALONE_CALC) && !defined(PHPCALC) static auto make_mod_param_node( const std::vector>& param_map, const std::string& name) -> XNode*