From c8f4af74552d275de30ad7c4391e92d34e4b7f90 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 20 Dec 2024 13:42:50 -0600 Subject: [PATCH] fixes --- .../librepertory/include/types/repertory.hpp | 35 +++++++++++-------- repertory/librepertory/src/app_config.cpp | 2 +- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/repertory/librepertory/include/types/repertory.hpp b/repertory/librepertory/include/types/repertory.hpp index 59a26372..6013ea8f 100644 --- a/repertory/librepertory/include/types/repertory.hpp +++ b/repertory/librepertory/include/types/repertory.hpp @@ -28,8 +28,7 @@ public: atomic() : mtx_(std::make_shared()) {} atomic(const atomic &at_data) - : data_(static_cast(at_data)), - mtx_(std::make_shared()) {} + : data_(at_data.load()), mtx_(std::make_shared()) {} atomic(data_t data) : data_(std::move(data)), mtx_(std::make_shared()) {} @@ -43,25 +42,34 @@ private: std::shared_ptr mtx_; public: + [[nodiscard]] auto load() const -> data_t { + mutex_lock lock(*mtx_); + return data_; + } + + auto store(data_t data) -> data_t { + mutex_lock lock(*mtx_); + data_ = std::move(data); + return data_; + } + auto operator=(const atomic &at_data) -> atomic & { if (&at_data == this) { return *this; } - mutex_lock lock(*mtx_); - static_cast(at_data) == data_; + store(at_data.load()); return *this; } auto operator=(atomic &&) -> atomic & = default; - auto operator=(const data_t &data) -> atomic & { + auto operator=(data_t data) -> atomic & { if (&data == &data_) { return *this; } - mutex_lock lock(*mtx_); - data_ = data; + store(std::move(data)); return *this; } @@ -71,7 +79,7 @@ public: } mutex_lock lock(*mtx_); - return static_cast(at_data) == data_; + return at_data.load() == data_; } [[nodiscard]] auto operator==(const data_t &data) const -> bool { @@ -89,7 +97,7 @@ public: } mutex_lock lock(*mtx_); - return static_cast(at_data) != data_; + return at_data.load() != data_; } [[nodiscard]] auto operator!=(const data_t &data) const -> bool { @@ -101,10 +109,7 @@ public: return data != data_; } - [[nodiscard]] operator data_t() const { - mutex_lock lock(*mtx_); - return data_; - } + [[nodiscard]] operator data_t() const { return load(); } }; inline constexpr const auto max_time{ @@ -558,11 +563,11 @@ template <> struct adl_serializer { template struct adl_serializer> { static void to_json(json &data, const repertory::atomic &value) { - data = static_cast(value); + data = value.load(); } static void from_json(const json &data, repertory::atomic &value) { - value = data.get(); + value.store(data.get()); } }; diff --git a/repertory/librepertory/src/app_config.cpp b/repertory/librepertory/src/app_config.cpp index 61e40657..8f0654aa 100644 --- a/repertory/librepertory/src/app_config.cpp +++ b/repertory/librepertory/src/app_config.cpp @@ -1065,7 +1065,7 @@ void app_config::set_sia_config(sia_config cfg) { set_value(sia_config_, cfg); } template auto app_config::set_value(dest &dst, const source &src) -> bool { - if (dst == src) { + if (dst.load() == src) { return false; }