Health-GPS  1.2.2.0
Global Health Policy Simulation model (Health-GPS)
repository.h
Go to the documentation of this file.
1 #pragma once
2 #include "disease_definition.h"
4 #include "energy_balance_model.h"
6 #include "interfaces.h"
7 #include "lms_definition.h"
8 #include "modelinput.h"
10 #include <functional>
11 #include <memory>
12 #include <mutex>
13 #include <optional>
14 
15 namespace hgps {
16 
18 class Repository {
19  public:
21  Repository() = default;
22  Repository(Repository &&) = delete;
23  Repository(const Repository &) = delete;
25  Repository &operator=(const Repository &) = delete;
27  virtual ~Repository() = default;
28 
31  virtual core::Datastore &manager() noexcept = 0;
32 
36  virtual const RiskFactorModelDefinition &
38 
42 
45  virtual const std::vector<core::DiseaseInfo> &get_diseases() = 0;
46 
50  virtual std::optional<core::DiseaseInfo> get_disease_info(core::Identifier code) = 0;
51 
57  virtual DiseaseDefinition &get_disease_definition(const core::DiseaseInfo &info,
58  const ModelInput &config) = 0;
59 
63 };
64 
69 class CachedRepository final : public Repository {
70  public:
71  CachedRepository() = delete;
72 
76 
80  void
81  register_risk_factor_model_definition(const HierarchicalModelType &model_type,
82  std::unique_ptr<RiskFactorModelDefinition> definition);
83 
86  void register_baseline_adjustment_definition(BaselineAdjustment definition);
87 
88  core::Datastore &manager() noexcept override;
89 
91  get_risk_factor_model_definition(const HierarchicalModelType &model_type) const override;
92 
94 
95  const std::vector<core::DiseaseInfo> &get_diseases() override;
96 
97  std::optional<core::DiseaseInfo> get_disease_info(core::Identifier code) override;
98 
99  DiseaseDefinition &get_disease_definition(const core::DiseaseInfo &info,
100  const ModelInput &config) override;
101 
102  LmsDefinition &get_lms_definition() override;
103 
104  void clear_cache() noexcept;
105 
106  private:
107  mutable std::mutex mutex_;
108  std::reference_wrapper<core::Datastore> data_manager_;
110  rf_model_definition_;
111  BaselineAdjustment baseline_adjustments_;
112  std::vector<core::DiseaseInfo> diseases_info_;
113  std::map<core::Identifier, DiseaseDefinition> diseases_;
114  LmsDefinition lms_parameters_;
115 
116  void load_disease_definition(const core::DiseaseInfo &info, const ModelInput &config);
117 };
118 } // namespace hgps
Implements the cached data repository for input datasets and back-end storage.
Definition: repository.h:69
Implements the disease full definition data type.
Definition: disease_definition.h:45
LMS (lambda-mu-sigma) model definition data type.
Definition: lms_definition.h:26
Defines the Simulation model inputs data type.
Definition: modelinput.h:43
Define the data repository interface for input datasets and back-end storage.
Definition: repository.h:18
virtual DiseaseDefinition & get_disease_definition(const core::DiseaseInfo &info, const ModelInput &config)=0
Gets a disease complete definition.
Repository & operator=(const Repository &)=delete
virtual BaselineAdjustment & get_baseline_adjustment_definition()=0
Gets the user provided baseline risk factors adjustment dataset.
virtual LmsDefinition & get_lms_definition()=0
Gets the LMS (lambda-mu-sigma) definition.
virtual ~Repository()=default
Destroys a Repository instance.
virtual const std::vector< core::DiseaseInfo > & get_diseases()=0
Gets the collection of all diseases available in the back-end storage.
Repository(Repository &&)=delete
virtual core::Datastore & manager() noexcept=0
Gets a reference to the back-end storage instance.
virtual std::optional< core::DiseaseInfo > get_disease_info(core::Identifier code)=0
Gets a disease information by identifier.
Repository & operator=(Repository &&)=delete
Repository()=default
Initialises a new instance of the Repository class.
virtual const RiskFactorModelDefinition & get_risk_factor_model_definition(const HierarchicalModelType &model_type) const =0
Gets a user-provided risk factor model definition.
Repository(const Repository &)=delete
Risk factor model definition interface.
Definition: interfaces.h:160
Defines the Health-GPS back-end data store interface for all implementations.
Definition: datastore.h:13
Top-level namespace for Health-GPS C++ API.
Definition: analysis_definition.h:8
HierarchicalModelType
Health GPS risk factor module types enumeration.
Definition: interfaces.h:29
Global namespace.
Definition: jsonparser.h:88
Defines the risk factor baseline adjustment data type.
Definition: riskfactor_adjustment_types.h:14