aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Workflow/Values
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Model/Workflow/Values')
-rw-r--r--core/src/Model/Workflow/Values/Dictionary.cpp49
-rw-r--r--core/src/Model/Workflow/Values/Dictionary.hpp25
-rw-r--r--core/src/Model/Workflow/Values/fwd.hpp3
3 files changed, 77 insertions, 0 deletions
diff --git a/core/src/Model/Workflow/Values/Dictionary.cpp b/core/src/Model/Workflow/Values/Dictionary.cpp
new file mode 100644
index 0000000..106e48d
--- /dev/null
+++ b/core/src/Model/Workflow/Values/Dictionary.cpp
@@ -0,0 +1,49 @@
+#include "Dictionary.hpp"
+
+#include "Utils/Macros.hpp"
+
+bool DictionaryValue::IsInstance(const BaseValue* value)
+{
+ return value->GetKind() == KD_Dictionary;
+}
+
+DictionaryValue::DictionaryValue()
+ : BaseValue(KD_Dictionary)
+{
+}
+
+int DictionaryValue::GetCount() const
+{
+ return mElements.size();
+}
+
+BaseValue* DictionaryValue::Find(std::string_view key)
+{
+ auto iter = mElements.find(key);
+ if (iter != mElements.end()) {
+ return iter.value().get();
+ } else {
+ return nullptr;
+ }
+}
+
+BaseValue* DictionaryValue::Insert(std::string_view key, std::unique_ptr<BaseValue>& value)
+{
+ auto [iter, success] = mElements.insert(key, std::move(value));
+ if (success) {
+ return iter.value().get();
+ } else {
+ return nullptr;
+ }
+}
+
+BaseValue& DictionaryValue::InsertOrReplace(std::string_view key, std::unique_ptr<BaseValue> value)
+{
+ auto [iter, DISCARD] = mElements.emplace(key, std::move(value));
+ return *iter.value();
+}
+
+void DictionaryValue::Remove(std::string_view key)
+{
+ mElements.erase(mElements.find(key));
+}
diff --git a/core/src/Model/Workflow/Values/Dictionary.hpp b/core/src/Model/Workflow/Values/Dictionary.hpp
new file mode 100644
index 0000000..65ea82f
--- /dev/null
+++ b/core/src/Model/Workflow/Values/Dictionary.hpp
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "Model/Workflow/Value.hpp"
+
+#include <tsl/array_map.h>
+#include <memory>
+#include <string>
+#include <string_view>
+
+class DictionaryValue : public BaseValue
+{
+private:
+ tsl::array_map<char, std::unique_ptr<BaseValue>> mElements;
+
+public:
+ static bool IsInstance(const BaseValue* value);
+ DictionaryValue();
+
+ int GetCount() const;
+ BaseValue* Find(std::string_view key);
+
+ BaseValue* Insert(std::string_view key, std::unique_ptr<BaseValue>& value);
+ BaseValue& InsertOrReplace(std::string_view key, std::unique_ptr<BaseValue> value);
+ void Remove(std::string_view key);
+};
diff --git a/core/src/Model/Workflow/Values/fwd.hpp b/core/src/Model/Workflow/Values/fwd.hpp
index de26226..51a04e9 100644
--- a/core/src/Model/Workflow/Values/fwd.hpp
+++ b/core/src/Model/Workflow/Values/fwd.hpp
@@ -10,5 +10,8 @@ class DatabaseRowIdValue;
class SaleDatabaseRowValue;
class PurchaseDatabaseRowValue;
+// Dictionary.hpp
+class DictionaryValue;
+
// List.hpp
class ListValue;