libfly  6.2.2
C++20 utility library for Linux, macOS, and Windows
config.hpp
1 #pragma once
2 
3 #include "fly/types/json/json.hpp"
4 
5 #include <shared_mutex>
6 #include <string>
7 
8 namespace fly::config {
9 
20 class Config
21 {
22 protected:
23  friend class ConfigManager;
24 
28  virtual ~Config() = default;
29 
41  template <typename T>
42  T get_value(const std::string &name, T def) const;
43 
47  void update(const Json &);
48 
49 private:
50  mutable std::shared_timed_mutex m_values_mutex;
51  Json m_values;
52 };
53 
54 //==================================================================================================
55 template <typename T>
56 T Config::get_value(const std::string &name, T def) const
57 {
58  std::shared_lock<std::shared_timed_mutex> lock(m_values_mutex);
59 
60  try
61  {
62  return T(m_values[name]);
63  }
64  catch (const JsonException &)
65  {
66  }
67 
68  return def;
69 }
70 
71 } // namespace fly::config
Definition: json_exception.hpp:19
Definition: json.hpp:162
Definition: config.hpp:21
void update(const Json &)
Definition: config.cpp:8
T get_value(const std::string &name, T def) const
Definition: config.hpp:56
virtual ~Config()=default
Definition: config_manager.hpp:47