From c1aa1d5a2b34b6a3339a157af3031b553fb8dd05 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 17 Mar 2021 17:26:55 +0000 Subject: Add a subclass of ExtensionItem exclusively for booleans. --- src/extensible.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'src/extensible.cpp') 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(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(1)); + if (sync) + Sync(container, reinterpret_cast(1)); +} + +void BoolExtItem::Unset(Extensible* container, bool sync) +{ + UnsetRaw(container); + if (sync) + Sync(container, reinterpret_cast(0)); +} + IntExtItem::IntExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync) : ExtensionItem(owner, key, exttype) , synced(sync) -- cgit v1.3.1-10-gc9f91