This commit is contained in:
Scott E. Graves 2024-12-19 13:31:57 -06:00
parent ce0e1358fc
commit a3991e7c76

View File

@ -26,11 +26,14 @@ namespace repertory {
template <typename data_t> class atomic final { template <typename data_t> class atomic final {
public: public:
atomic() : mtx_(std::make_shared<std::mutex>()) {} atomic() : mtx_(std::make_shared<std::mutex>()) {}
atomic(const atomic &) = default;
atomic(const atomic &at_data)
: data_(static_cast<data_t>(at_data)),
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>()) {}
atomic(data_t data, std::unique_ptr<std::mutex> mtx)
: data_(std::move(data)), mtx_(std::move(mtx)) {}
atomic(atomic &&) = default; atomic(atomic &&) = default;
~atomic() = default; ~atomic() = default;
@ -40,7 +43,15 @@ private:
std::shared_ptr<std::mutex> mtx_; std::shared_ptr<std::mutex> mtx_;
public: public:
auto operator=(const atomic &) -> atomic & = default; auto operator=(const atomic &at_data) -> atomic & {
if (&at_data == this) {
return *this;
}
mutex_lock lock(*mtx_);
static_cast<data_t>(at_data) == data_;
return *this;
}
auto operator=(atomic &&) -> atomic & = default; auto operator=(atomic &&) -> atomic & = default;