Health-GPS 3.0.0.0
Global Health Policy Simulation model (Health-GPS)
Loading...
Searching...
No Matches
repository.h
Go to the documentation of this file.
1#pragma once
2
4
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
15namespace hgps {
16
19 public:
21 Repository() = default;
22 Repository(Repository &&) = delete;
23 Repository(const Repository &) = delete;
25 Repository &operator=(const Repository &) = delete;
26
28 virtual ~Repository() = default;
29
32 virtual core::Datastore &manager() noexcept = 0;
33
37 virtual const RiskFactorModelDefinition &
39
42 virtual const std::vector<core::DiseaseInfo> &get_diseases() = 0;
43
47 virtual std::optional<core::DiseaseInfo> get_disease_info(core::Identifier code) = 0;
48
54 virtual DiseaseDefinition &get_disease_definition(const core::DiseaseInfo &info,
55 const ModelInput &config) = 0;
56
60
64 const std::map<core::Identifier, std::map<core::Gender, std::map<std::string, double>>>
65 &region_data) = 0;
66
70 const std::map<core::Identifier,
71 std::map<core::Gender, std::map<std::string, std::map<std::string, double>>>>
72 &ethnicity_data) = 0;
73
76 virtual const std::map<core::Identifier,
77 std::map<core::Gender, std::map<std::string, double>>> &
79
82 virtual const std::map<
83 core::Identifier,
84 std::map<core::Gender, std::map<std::string, std::map<std::string, double>>>> &
86};
87
92class CachedRepository final : public Repository {
93 public:
94 CachedRepository() = delete;
95
99
103 void
104 register_risk_factor_model_definition(const RiskFactorModelType &model_type,
105 std::unique_ptr<RiskFactorModelDefinition> definition);
106
107 core::Datastore &manager() noexcept override;
108
110 get_risk_factor_model_definition(const RiskFactorModelType &model_type) const override;
111
112 const std::vector<core::DiseaseInfo> &get_diseases() override;
113
114 std::optional<core::DiseaseInfo> get_disease_info(core::Identifier code) override;
115
116 DiseaseDefinition &get_disease_definition(const core::DiseaseInfo &info,
117 const ModelInput &config) override;
118
120
122 const std::map<core::Identifier, std::map<core::Gender, std::map<std::string, double>>>
123 &region_data) override;
124
126 const std::map<core::Identifier,
127 std::map<core::Gender, std::map<std::string, std::map<std::string, double>>>>
128 &ethnicity_data) override;
129
130 const std::map<core::Identifier, std::map<core::Gender, std::map<std::string, double>>> &
131 get_region_prevalence() const override;
132
133 const std::map<core::Identifier,
134 std::map<core::Gender, std::map<std::string, std::map<std::string, double>>>> &
135 get_ethnicity_prevalence() const override;
136
137 void clear_cache() noexcept;
138
139 private:
140 mutable std::mutex mutex_;
141 std::reference_wrapper<core::Datastore> data_manager_;
142 std::map<RiskFactorModelType, std::unique_ptr<RiskFactorModelDefinition>> rf_model_definition_;
143 std::vector<core::DiseaseInfo> diseases_info_;
144 std::map<core::Identifier, DiseaseDefinition> diseases_;
145 LmsDefinition lms_parameters_;
146
148 std::map<core::Identifier, std::map<core::Gender, std::map<std::string, double>>>
149 region_prevalence_;
150
152 std::map<core::Identifier,
153 std::map<core::Gender, std::map<std::string, std::map<std::string, double>>>>
154 ethnicity_prevalence_;
155
156 void load_disease_definition(const core::DiseaseInfo &info, const ModelInput &config);
157};
158} // namespace hgps
Implements the cached data repository for input datasets and back-end storage.
Definition repository.h:92
Implements the disease full definition data type.
Definition disease_definition.h:46
LMS (lambda-mu-sigma) model definition data type.
Definition lms_definition.h:26
Defines the Simulation model inputs data type.
Definition modelinput.h:49
Define the data repository interface for input datasets and back-end storage.
Definition repository.h:18
virtual void register_region_prevalence(const std::map< core::Identifier, std::map< core::Gender, std::map< std::string, double > > > &region_data)=0
Register region prevalence data.
virtual ~Repository()=default
Destroys a Repository instance.
virtual void register_ethnicity_prevalence(const std::map< core::Identifier, std::map< core::Gender, std::map< std::string, std::map< std::string, double > > > > &ethnicity_data)=0
Register ethnicity prevalence data.
Repository & operator=(const Repository &)=delete
virtual DiseaseDefinition & get_disease_definition(const core::DiseaseInfo &info, const ModelInput &config)=0
Gets a disease complete definition.
virtual const std::map< core::Identifier, std::map< core::Gender, std::map< std::string, double > > > & get_region_prevalence() const =0
Gets region prevalence data.
virtual std::optional< core::DiseaseInfo > get_disease_info(core::Identifier code)=0
Gets a disease information by identifier.
virtual core::Datastore & manager() noexcept=0
Gets a reference to the back-end storage instance.
virtual const std::vector< core::DiseaseInfo > & get_diseases()=0
Gets the collection of all diseases available in the back-end storage.
virtual const RiskFactorModelDefinition & get_risk_factor_model_definition(const RiskFactorModelType &model_type) const =0
Gets a user-provided risk factor model definition.
Repository(Repository &&)=delete
virtual const std::map< core::Identifier, std::map< core::Gender, std::map< std::string, std::map< std::string, double > > > > & get_ethnicity_prevalence() const =0
Gets ethnicity prevalence data.
Repository()=default
Initialises a new instance of the Repository class.
virtual LmsDefinition & get_lms_definition()=0
Gets the LMS (lambda-mu-sigma) definition.
Repository(const Repository &)=delete
Repository & operator=(Repository &&)=delete
Risk factor model definition interface.
Definition risk_factor_model.h:44
Defines the Health-GPS back-end data store interface for all implementations.
Definition datastore.h:14
Top-level namespace for Health-GPS Console host application.
Definition command_options.cpp:8
@ info
General notification and progress message.
RiskFactorModelType
Health GPS risk factor module types enumeration.
Definition risk_factor_model.h:12
Global namespace.
Definition column_iterator.h:123