diff --git a/include/wups/config/WUPSConfigCategory.h b/include/wups/config/WUPSConfigCategory.h index 9f21988..fbfbd5b 100644 --- a/include/wups/config/WUPSConfigCategory.h +++ b/include/wups/config/WUPSConfigCategory.h @@ -4,7 +4,6 @@ #include "WUPSConfigItem.h" #include -#include #include class WUPSConfigCategory { @@ -14,17 +13,11 @@ public: WUPSConfigCategory(const WUPSConfigCategory &) = delete; - WUPSConfigCategory(WUPSConfigCategory &&src) noexcept : mHandle(src.mHandle) { - src.mHandle = {}; - } + WUPSConfigCategory(WUPSConfigCategory &&src) noexcept; - WUPSConfigCategory &operator=(WUPSConfigCategory &&src) noexcept { - if (this != &src) { - this->mHandle = src.mHandle; - src.mHandle = {}; - } - return *this; - } + WUPSConfigCategory &operator=(WUPSConfigCategory &&src) noexcept; + + void releaseHandle() noexcept; static std::optional Create(std::string_view name, WUPSConfigAPIStatus &error) noexcept; @@ -38,13 +31,9 @@ public: void add(WUPSConfigItem &&item); - [[nodiscard]] const WUPSConfigCategoryHandle &getHandle() const { - return mHandle; - } + [[nodiscard]] const WUPSConfigCategoryHandle &getHandle() const; - void release() { - mHandle = {}; - } + void release(); private: WUPSConfigCategoryHandle mHandle = {}; diff --git a/include/wups/config/WUPSConfigItem.h b/include/wups/config/WUPSConfigItem.h index 4547515..72de61c 100644 --- a/include/wups/config/WUPSConfigItem.h +++ b/include/wups/config/WUPSConfigItem.h @@ -14,25 +14,15 @@ public: WUPSConfigItem(const WUPSConfigItem &) = delete; - WUPSConfigItem(WUPSConfigItem &&src) noexcept : mHandle(src.mHandle) { - src.mHandle = {}; - } + WUPSConfigItem(WUPSConfigItem &&src) noexcept; - WUPSConfigItem &operator=(WUPSConfigItem &&src) noexcept { - if (this != &src) { - this->mHandle = src.mHandle; - src.mHandle = {}; - } - return *this; - } + WUPSConfigItem &operator=(WUPSConfigItem &&src) noexcept; - [[nodiscard]] const WUPSConfigItemHandle &getHandle() const { - return mHandle; - } + void releaseHandle() noexcept; - void release() { - mHandle = {}; - } + [[nodiscard]] const WUPSConfigItemHandle &getHandle() const; + + void release(); private: WUPSConfigItemHandle mHandle = {}; diff --git a/libraries/libwups/WUPSConfigCategory.cpp b/libraries/libwups/WUPSConfigCategory.cpp index 7757627..611ba0a 100644 --- a/libraries/libwups/WUPSConfigCategory.cpp +++ b/libraries/libwups/WUPSConfigCategory.cpp @@ -1,12 +1,34 @@ #include #include -WUPSConfigCategory::WUPSConfigCategory(WUPSConfigCategoryHandle handle) noexcept : mHandle(handle) { +#include + +WUPSConfigCategory::WUPSConfigCategory(const WUPSConfigCategoryHandle handle) noexcept : mHandle(handle) { } WUPSConfigCategory::~WUPSConfigCategory() { + releaseHandle(); +} + +WUPSConfigCategory::WUPSConfigCategory(WUPSConfigCategory &&src) noexcept { + releaseHandle(); + mHandle = src.mHandle; + src.mHandle = {}; +} + +WUPSConfigCategory &WUPSConfigCategory::operator=(WUPSConfigCategory &&src) noexcept { + if (this != &src) { + releaseHandle(); + this->mHandle = src.mHandle; + src.mHandle = {}; + } + return *this; +} + +void WUPSConfigCategory::releaseHandle() noexcept { if (mHandle.handle != nullptr) { WUPSConfigAPI_Category_Destroy(mHandle); + mHandle.handle = nullptr; } } @@ -18,7 +40,7 @@ std::optional WUPSConfigCategory::Create(std::string_view na return WUPSConfigCategory(catHandle); } -WUPSConfigCategory WUPSConfigCategory::Create(std::string_view name) { +WUPSConfigCategory WUPSConfigCategory::Create(const std::string_view name) { WUPSConfigAPIStatus error; auto res = Create(name, error); if (!res) { @@ -62,4 +84,12 @@ void WUPSConfigCategory::add(WUPSConfigItem &&item) { if (!add(std::move(item), err)) { throw std::runtime_error{"Failed to add item to category"}; } +} + +const WUPSConfigCategoryHandle &WUPSConfigCategory::getHandle() const { + return mHandle; +} + +void WUPSConfigCategory::release() { + mHandle = {}; } \ No newline at end of file diff --git a/libraries/libwups/WUPSConfigItem.cpp b/libraries/libwups/WUPSConfigItem.cpp index 33272a5..51c5771 100644 --- a/libraries/libwups/WUPSConfigItem.cpp +++ b/libraries/libwups/WUPSConfigItem.cpp @@ -2,7 +2,35 @@ #include WUPSConfigItem::~WUPSConfigItem() { + releaseHandle(); +} + +WUPSConfigItem::WUPSConfigItem(WUPSConfigItem &&src) noexcept { + releaseHandle(); + this->mHandle = src.mHandle; + src.mHandle = {}; +} + +WUPSConfigItem &WUPSConfigItem::operator=(WUPSConfigItem &&src) noexcept { + if (this != &src) { + releaseHandle(); + this->mHandle = src.mHandle; + src.mHandle = {}; + } + return *this; +} + +void WUPSConfigItem::releaseHandle() noexcept { if (mHandle.handle != nullptr) { WUPSConfigAPI_Item_Destroy(mHandle); + mHandle.handle = nullptr; } +} + +const WUPSConfigItemHandle &WUPSConfigItem::getHandle() const { + return mHandle; +} + +void WUPSConfigItem::release() { + mHandle = {}; } \ No newline at end of file