Program Listing for File logged_value.hpp
↰ Return to documentation for file (include/data_tamer/logged_value.hpp
)
#pragma once
#include "data_tamer/types.hpp"
#include "data_tamer/details/locked_reference.hpp"
#include <memory>
#include <shared_mutex>
namespace DataTamer
{
class LogChannel;
template <typename T>
class LoggedValue
{
protected:
LoggedValue(const std::shared_ptr<LogChannel>& channel, const std::string& name,
T initial_value);
friend LogChannel;
public:
LoggedValue() {}
~LoggedValue();
LoggedValue(LoggedValue const& other) = delete;
LoggedValue& operator=(LoggedValue const& other) = delete;
LoggedValue(LoggedValue&& other) = default;
LoggedValue& operator=(LoggedValue&& other) = default;
void set(const T& value, bool auto_enable = true);
[[nodiscard]] T get();
[[nodiscard]] LockedPtr<T> getLockedPtr();
void setEnabled(bool enabled);
[[nodiscard]] bool isEnabled() const { return enabled_; }
private:
std::weak_ptr<LogChannel> channel_;
T value_ = {};
RegistrationID id_;
bool enabled_ = true;
std::shared_mutex rw_mutex_;
};
} // namespace DataTamer