Implement new ConfigAPI and new Config Menu

This commit is contained in:
Maschell
2023-12-16 17:36:57 +01:00
parent b991d6e329
commit 921b5ce157
40 changed files with 2578 additions and 1319 deletions

View File

@@ -8,6 +8,7 @@
#include <memory>
#include <mutex>
#include <set>
#include <vector>
#ifdef __cplusplus
extern "C" {
@@ -91,12 +92,44 @@ remove_first_if(Container &container, Predicate pred) {
return false;
}
template<typename Container, typename Predicate>
typename std::enable_if<std::is_same<Container, std::vector<typename Container::value_type>>::value, bool>::type
remove_first_if(Container &container, Predicate pred) {
auto it = container.begin();
while (it != container.end()) {
if (pred(*it)) {
container.erase(it);
return true;
}
++it;
}
return false;
}
template<typename Container, typename Predicate>
bool remove_locked_first_if(std::mutex &mutex, Container &container, Predicate pred) {
std::lock_guard<std::mutex> lock(mutex);
return remove_first_if(container, pred);
}
template<typename T, typename Predicate>
T pop_locked_first_if(std::mutex &mutex, std::vector<T> &container, Predicate pred) {
std::lock_guard<std::mutex> lock(mutex);
T result;
auto it = container.begin();
while (it != container.end()) {
if (pred(*it)) {
result = std::move(*it);
container.erase(it);
return result;
}
++it;
}
return result;
}
std::string getPluginPath();
OSDynLoad_Error CustomDynLoadAlloc(int32_t size, int32_t align, void **outAddr);