From d211211ac87d30e4774c01e6765c2419dce3fe1f Mon Sep 17 00:00:00 2001 From: Josh Ferrell Date: Fri, 10 Nov 2023 17:52:21 -0500 Subject: Add support for object settings --- settings.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'settings.cpp') diff --git a/settings.cpp b/settings.cpp index 59394c42..6066aa1e 100644 --- a/settings.cpp +++ b/settings.cpp @@ -259,6 +259,26 @@ vector Settings::Get>(const string& key, Ref } +template <> +map Settings::Get>(const string& key, Ref view, BNSettingsScope* scope) +{ + // [[key, val], ...] + size_t size = 0; + char*** outBuffer = + (char***)BNSettingsGetStringObject(m_object, key.c_str(), view ? view->GetObject() : nullptr, scope, &size); + + map result; + for (size_t i = 0; i < size; i++) + { + char** entry = outBuffer[i]; + result[entry[0]] = entry[1]; + } + + BNFreeStringObject(outBuffer, size); + return result; +} + + string Settings::GetJson(const string& key, Ref view, BNSettingsScope* scope) { char* tmpStr = BNSettingsGetJson(m_object, key.c_str(), view ? view->GetObject() : nullptr, scope); @@ -329,6 +349,29 @@ bool Settings::Set(const string& key, const vector& value, Ref& value, Ref view, BNSettingsScope scope) +{ + char*** buffer = new char**[value.size()]; + if (!buffer) + return false; + + size_t i = 0; + for (const auto& entry : value) + { + buffer[i] = new char*[2]; + buffer[i][0] = BNAllocString(entry.first.c_str()); + buffer[i][1] = BNAllocString(entry.second.c_str()); + i++; + } + + bool result = BNSettingsSetStringObject( + m_object, view ? view->GetObject() : nullptr, scope, key.c_str(), (const char***)buffer, value.size()); + + BNFreeStringObject(buffer, value.size()); + return result; +} + + bool Settings::SetJson(const string& key, const string& value, Ref view, BNSettingsScope scope) { return BNSettingsSetJson(m_object, view ? view->GetObject() : nullptr, scope, key.c_str(), value.c_str()); -- cgit v1.3.1