Simpact Cyan
Population based event driven simulation using mNRM
configfunctions.h
1 #ifndef CONFIGFUNCTIONS_H
2 
3 #define CONFIGFUNCTIONS_H
4 
5 #include <vector>
6 #include <string>
7 #include <map>
8 
9 class ConfigSettings;
10 class ConfigWriter;
12 
13 class ConfigFunctions
14 {
15 public:
16  typedef void (*ProcessConfigFunction)(ConfigSettings &config, GslRandomNumberGenerator *pRngGen);
17  typedef void (*ObtainConfigFunction)(ConfigWriter &config);
18 
19  ConfigFunctions(ProcessConfigFunction processFunction, ObtainConfigFunction obtainFunction,
20  const std::string &name, const std::string &categoryName = "default");
21 
22  static void processConfigurations(ConfigSettings &config, GslRandomNumberGenerator *pRndGen,
23  const std::vector<std::string> &excludeCategories = std::vector<std::string>() );
24  static void obtainConfigurations(ConfigWriter &config, const std::vector<std::string> &excludeCategories = std::vector<std::string>());
25 private:
26  static void check();
27 
28  class ConfigFunctionsInternal
29  {
30  public:
31  ConfigFunctionsInternal(ProcessConfigFunction p = 0, ObtainConfigFunction o = 0, const std::string &n = "") : procFunc(p), obtFunc(o), name(n) { }
32  ConfigFunctionsInternal(const ConfigFunctionsInternal &src) : procFunc(src.procFunc), obtFunc(src.obtFunc), name(src.name) { }
33 
34  ProcessConfigFunction procFunc;
35  ObtainConfigFunction obtFunc;
36  std::string name;
37 
38  // We'll (ab)use the same class for the sorting function as well
39  bool operator()(const ConfigFunctionsInternal &a, const ConfigFunctionsInternal &b) const { return (a.name < b.name); }
40  void operator=(const ConfigFunctionsInternal &src) { procFunc = src.procFunc; obtFunc = src.obtFunc ; name = src.name; }
41  };
42 
43  static std::map<std::string, std::vector<ConfigFunctionsInternal> > *s_pConfigFunctionMap;
44  static bool contains(const std::vector<std::string> &v, const std::string &x);
45 };
46 
47 #endif // CONFIGFUNCTIONS_H
48 
Helper class to read configuration settings, more advanced than ConfigReader.
Definition: configsettings.h:21
This class allows you to generate random numbers, and uses the GNU Scientific Library for this...
Definition: gslrandomnumbergenerator.h:16