fixes
This commit is contained in:
parent
7a6a7421cd
commit
c8f4af7455
@ -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>());
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user