This commit is contained in:
Scott E. Graves 2024-12-20 13:42:50 -06:00
parent 7a6a7421cd
commit c8f4af7455
2 changed files with 21 additions and 16 deletions

View File

@ -28,8 +28,7 @@ public:
atomic() : mtx_(std::make_shared<std::mutex>()) {}
atomic(const atomic &at_data)
: data_(static_cast<data_t>(at_data)),
mtx_(std::make_shared<std::mutex>()) {}
: data_(at_data.load()), mtx_(std::make_shared<std::mutex>()) {}
atomic(data_t data)
: data_(std::move(data)), mtx_(std::make_shared<std::mutex>()) {}
@ -43,25 +42,34 @@ private:
std::shared_ptr<std::mutex> 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<data_t>(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<data_t>(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<data_t>(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<repertory::sia_config> {
template <typename data_t> struct adl_serializer<repertory::atomic<data_t>> {
static void to_json(json &data, const repertory::atomic<data_t> &value) {
data = static_cast<data_t>(value);
data = value.load();
}
static void from_json(const json &data, repertory::atomic<data_t> &value) {
value = data.get<data_t>();
value.store(data.get<data_t>());
}
};

View File

@ -1065,7 +1065,7 @@ void app_config::set_sia_config(sia_config cfg) { set_value(sia_config_, cfg); }
template <typename dest, typename source>
auto app_config::set_value(dest &dst, const source &src) -> bool {
if (dst == src) {
if (dst.load() == src) {
return false;
}