diff --git a/src/engine/config.cpp b/src/engine/config.cpp index 3e1f86179..2feb8a82a 100644 --- a/src/engine/config.cpp +++ b/src/engine/config.cpp @@ -175,6 +175,33 @@ String DivConfig::getString(String key, String fallback) const { return fallback; } +std::vector DivConfig::getIntList(String key, std::initializer_list fallback) const { + String next; + std::vector ret; + try { + String val=conf.at(key); + + for (char i: val) { + if (i==',') { + int num=std::stoi(next); + ret.push_back(num); + next=""; + } else { + next+=i; + } + } + if (!next.empty()) { + int num=std::stoi(next); + ret.push_back(num); + } + + return ret; + } catch (std::out_of_range& e) { + } catch (std::invalid_argument& e) { + } + return fallback; +} + bool DivConfig::has(String key) const { try { String test=conf.at(key); @@ -212,6 +239,17 @@ void DivConfig::set(String key, String value) { conf[key]=value; } +void DivConfig::set(String key, const std::vector& value) { + String val; + bool comma=false; + for (int i: value) { + if (comma) val+=','; + val+=fmt::sprintf("%d",i); + comma=true; + } + conf[key]=val; +} + bool DivConfig::remove(String key) { return conf.erase(key); } diff --git a/src/engine/config.h b/src/engine/config.h index 58ce83708..82a1a4217 100644 --- a/src/engine/config.h +++ b/src/engine/config.h @@ -22,6 +22,8 @@ #include "../ta-utils.h" #include +#include +#include class DivConfig { std::map conf; @@ -44,6 +46,7 @@ class DivConfig { float getFloat(String key, float fallback) const; double getDouble(String key, double fallback) const; String getString(String key, String fallback) const; + std::vector getIntList(String key, std::initializer_list fallback) const; // check for existence bool has(String key) const; @@ -55,6 +58,7 @@ class DivConfig { void set(String key, double value); void set(String key, const char* value); void set(String key, String value); + void set(String key, const std::vector& value); // remove a config value bool remove(String key);