RTC Toolkit  0.1.0-alpha
parameter.hpp
Go to the documentation of this file.
1 
9 #ifndef RTCTK_DATATASK_PARAMETER_HPP
10 #define RTCTK_DATATASK_PARAMETER_HPP
11 
12 #include <string>
13 #include <stdexcept>
14 
15 namespace rtctk::dataTask {
20 class ParameterNotSet : public std::runtime_error
21 {
22  public:
23  ParameterNotSet(const std::string& par_name)
24  : std::runtime_error("Parameter '" + par_name + "' not set!") {}
25 };
26 
27 class ParameterNotWriteable : public std::runtime_error
28 {
29  public:
30  ParameterNotWriteable(const std::string& par_name)
31  : std::runtime_error("Parameter '" + par_name + "' not writeable!") {}
32 };
33 
39 //TODO can we do some value range checking with traits as well here?
40 template<class T>
41 class Parameter
42 {
43 public:
44 
45  Parameter(std::string const& name)
46  : m_name(name)
47  , m_value()
48  , m_is_set(false)
49  , m_is_locked(false)
50  { }
51 
52  Parameter(std::string const& name, T const& value)
53  : m_name(name)
54  , m_value(value)
55  , m_is_set(true)
56  , m_is_locked(false)
57  { }
58 
63  void Set(T const& value)
64  {
65  if(m_is_locked) {
66  throw ParameterNotWriteable(m_name);
67  }
68  m_value = value;
69  m_is_set = true;
70  }
71 
75  void Lock() {
76  m_is_locked = true;
77  }
78 
82  void Unlock() {
83  m_is_locked = false;
84  }
85 
86 
91  T& Get()
92  {
93  if(not m_is_set) {
94  throw ParameterNotSet(m_name);
95  }
96  return m_value;
97  }
98 
103  bool IsSet() {
104  return m_is_set;
105  }
106 
110  void CheckSet() {
111  if(not m_is_set) {
112  throw ParameterNotSet(m_name);
113  }
114  }
115 
116 private:
117  const std::string m_name; //< name of paramter
118  T m_value; //< value
119  bool m_is_set; //< bool is the value set
120  bool m_is_locked; //< bool is the value locked.
121 };
122 
123 } // namespace
124 
125 #endif
rtctk::dataTask::Parameter::IsSet
bool IsSet()
Definition: parameter.hpp:103
rtctk::dataTask::ParameterNotWriteable
Definition: parameter.hpp:28
rtctk::dataTask::Parameter::Set
void Set(T const &value)
Definition: parameter.hpp:63
rtctk::dataTask::ParameterNotSet::ParameterNotSet
ParameterNotSet(const std::string &par_name)
Definition: parameter.hpp:23
rtctk::dataTask::Parameter::Unlock
void Unlock()
Definition: parameter.hpp:82
rtctk::dataTask::ParameterNotWriteable::ParameterNotWriteable
ParameterNotWriteable(const std::string &par_name)
Definition: parameter.hpp:30
rtctk::dataTask::ParameterNotSet
Definition: parameter.hpp:21
rtctk::dataTask::Parameter
Definition: parameter.hpp:42
rtctk::dataTask
Definition: messageQueue.hpp:17
rtctk::dataTask::Parameter::CheckSet
void CheckSet()
Definition: parameter.hpp:110
rtctk::dataTask::Parameter::Parameter
Parameter(std::string const &name, T const &value)
Definition: parameter.hpp:52
rtctk::dataTask::Parameter::Parameter
Parameter(std::string const &name)
Definition: parameter.hpp:45
std
Definition: mudpiProcessingError.hpp:109
rtctk::dataTask::Parameter::Lock
void Lock()
Definition: parameter.hpp:75
rtctk::dataTask::Parameter::Get
T & Get()
Definition: parameter.hpp:91