aboutsummaryrefslogtreecommitdiff
path: root/src/extensible.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2021-03-17 17:26:55 +0000
committerGravatar Sadie Powell2021-03-17 21:14:07 +0000
commitc1aa1d5a2b34b6a3339a157af3031b553fb8dd05 (patch)
tree5b4090c8603f734ae8c6f230351afcd94190bb9d /src/extensible.cpp
parentImplement support for automatically syncing extension items. (diff)
Add a subclass of ExtensionItem exclusively for booleans.
Diffstat (limited to 'src/extensible.cpp')
-rw-r--r--src/extensible.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/extensible.cpp b/src/extensible.cpp
index 21d064ad1..e80c91e5f 100644
--- a/src/extensible.cpp
+++ b/src/extensible.cpp
@@ -182,6 +182,65 @@ std::string ExtensionItem::ToNetwork(const Extensible* container, void* item) co
return std::string();
}
+BoolExtItem::BoolExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync)
+ : ExtensionItem(owner, key, exttype)
+ , synced(sync)
+{
+}
+
+void BoolExtItem::Delete(Extensible* container, void* item)
+{
+ // Intentionally left blank.
+}
+
+void BoolExtItem::FromInternal(Extensible* container, const std::string& value) noexcept
+{
+ if (ConvToNum<intptr_t>(value))
+ Set(container, false);
+ else
+ Unset(container, false);
+}
+
+std::string BoolExtItem::ToHuman(const Extensible* container, void* item) const noexcept
+{
+ return item ? "set" : "unset";
+}
+
+void BoolExtItem::FromNetwork(Extensible* container, const std::string& value) noexcept
+{
+ if (synced)
+ FromInternal(container, value);
+}
+
+std::string BoolExtItem::ToInternal(const Extensible* container, void* item) const noexcept
+{
+ return ConvToStr(!!item);
+}
+
+std::string BoolExtItem::ToNetwork(const Extensible* container, void* item) const noexcept
+{
+ return synced ? ToInternal(container, item) : std::string();
+}
+
+bool BoolExtItem::Get(const Extensible* container) const
+{
+ return GetRaw(container);
+}
+
+void BoolExtItem::Set(Extensible* container, bool sync)
+{
+ SetRaw(container, reinterpret_cast<void*>(1));
+ if (sync)
+ Sync(container, reinterpret_cast<void*>(1));
+}
+
+void BoolExtItem::Unset(Extensible* container, bool sync)
+{
+ UnsetRaw(container);
+ if (sync)
+ Sync(container, reinterpret_cast<void*>(0));
+}
+
IntExtItem::IntExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync)
: ExtensionItem(owner, key, exttype)
, synced(sync)