fixes
This commit is contained in:
parent
7a6a7421cd
commit
c8f4af7455
@ -28,8 +28,7 @@ public:
|
|||||||
atomic() : mtx_(std::make_shared<std::mutex>()) {}
|
atomic() : mtx_(std::make_shared<std::mutex>()) {}
|
||||||
|
|
||||||
atomic(const atomic &at_data)
|
atomic(const atomic &at_data)
|
||||||
: data_(static_cast<data_t>(at_data)),
|
: data_(at_data.load()), mtx_(std::make_shared<std::mutex>()) {}
|
||||||
mtx_(std::make_shared<std::mutex>()) {}
|
|
||||||
|
|
||||||
atomic(data_t data)
|
atomic(data_t data)
|
||||||
: data_(std::move(data)), mtx_(std::make_shared<std::mutex>()) {}
|
: data_(std::move(data)), mtx_(std::make_shared<std::mutex>()) {}
|
||||||
@ -43,25 +42,34 @@ private:
|
|||||||
std::shared_ptr<std::mutex> mtx_;
|
std::shared_ptr<std::mutex> mtx_;
|
||||||
|
|
||||||
public:
|
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 & {
|
auto operator=(const atomic &at_data) -> atomic & {
|
||||||
if (&at_data == this) {
|
if (&at_data == this) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock lock(*mtx_);
|
store(at_data.load());
|
||||||
static_cast<data_t>(at_data) == data_;
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto operator=(atomic &&) -> atomic & = default;
|
auto operator=(atomic &&) -> atomic & = default;
|
||||||
|
|
||||||
auto operator=(const data_t &data) -> atomic & {
|
auto operator=(data_t data) -> atomic & {
|
||||||
if (&data == &data_) {
|
if (&data == &data_) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock lock(*mtx_);
|
store(std::move(data));
|
||||||
data_ = data;
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +79,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock lock(*mtx_);
|
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 {
|
[[nodiscard]] auto operator==(const data_t &data) const -> bool {
|
||||||
@ -89,7 +97,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock lock(*mtx_);
|
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 {
|
[[nodiscard]] auto operator!=(const data_t &data) const -> bool {
|
||||||
@ -101,10 +109,7 @@ public:
|
|||||||
return data != data_;
|
return data != data_;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] operator data_t() const {
|
[[nodiscard]] operator data_t() const { return load(); }
|
||||||
mutex_lock lock(*mtx_);
|
|
||||||
return data_;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline constexpr const auto max_time{
|
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>> {
|
template <typename data_t> struct adl_serializer<repertory::atomic<data_t>> {
|
||||||
static void to_json(json &data, const repertory::atomic<data_t> &value) {
|
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) {
|
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>
|
template <typename dest, typename source>
|
||||||
auto app_config::set_value(dest &dst, const source &src) -> bool {
|
auto app_config::set_value(dest &dst, const source &src) -> bool {
|
||||||
if (dst == src) {
|
if (dst.load() == src) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user