ADD: made data threadsafe
This commit is contained in:
@@ -1,29 +1,57 @@
|
||||
#pragma once
|
||||
|
||||
#include <chrono>
|
||||
#include <mutex>
|
||||
|
||||
namespace SimCore
|
||||
{
|
||||
template <typename T>
|
||||
class Data{
|
||||
|
||||
private:
|
||||
|
||||
T data_;
|
||||
|
||||
bool valid_;
|
||||
|
||||
std::uint64_t writeTime_;
|
||||
|
||||
public:
|
||||
|
||||
Data():valid_(false),writeTime_(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count())
|
||||
Data():mx(),valid_(false),writeTime_(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Data (const Data &other)
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(other.mx);
|
||||
if (typeid(other.data_) == typeid(data_))
|
||||
{
|
||||
data_ = other.data_;
|
||||
valid_ = true;
|
||||
writeTime_ = other.writeTime_;
|
||||
}else
|
||||
{
|
||||
valid_ = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
Data& operator=(const Data other)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(other.mx);
|
||||
if (typeid(other.data_) == typeid(data_))
|
||||
{
|
||||
this->data_ = other.data_;
|
||||
this->valid_ = other.valid_;
|
||||
this->writeTime_ = other.writeTime_;
|
||||
}else
|
||||
{
|
||||
this->valid_ = false;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void setValue(T value)
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(mx);
|
||||
data_ = value;
|
||||
valid_ = true;
|
||||
writeTime_ = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
|
||||
@@ -31,6 +59,7 @@ namespace SimCore
|
||||
|
||||
T getValue()
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(mx);
|
||||
return data_;
|
||||
}
|
||||
|
||||
@@ -42,14 +71,25 @@ namespace SimCore
|
||||
|
||||
bool isValid()
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(mx);
|
||||
return valid_;
|
||||
}
|
||||
|
||||
std::uint64_t getWriteTime()
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(mx);
|
||||
return writeTime_;
|
||||
}
|
||||
private:
|
||||
|
||||
T data_;
|
||||
|
||||
bool valid_;
|
||||
|
||||
std::uint64_t writeTime_;
|
||||
|
||||
mutable std::mutex mx;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user