mirror of
https://github.com/wiiu-env/WiiUPluginSystem.git
synced 2025-02-15 08:09:12 +01:00
ConfigAPI: release handle in move operator/constructor before overwriting it.
This commit is contained in:
parent
5dc33a32ff
commit
6e1c40fc39
@ -4,7 +4,6 @@
|
||||
|
||||
#include "WUPSConfigItem.h"
|
||||
#include <optional>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
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<WUPSConfigCategory> 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 = {};
|
||||
|
@ -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 = {};
|
||||
|
@ -1,12 +1,34 @@
|
||||
#include <wups/config/WUPSConfigCategory.h>
|
||||
#include <wups/config_api.h>
|
||||
|
||||
WUPSConfigCategory::WUPSConfigCategory(WUPSConfigCategoryHandle handle) noexcept : mHandle(handle) {
|
||||
#include <stdexcept>
|
||||
|
||||
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> 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 = {};
|
||||
}
|
@ -2,7 +2,35 @@
|
||||
#include <wups/config_api.h>
|
||||
|
||||
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 = {};
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user