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