Horizon
pool_manager.hpp
1 #pragma once
2 #include "util/uuid.hpp"
3 #include <map>
4 #include <sigc++/sigc++.h>
5 #include <vector>
6 
7 namespace horizon {
8 
9 class PoolManagerPool {
10 public:
11  PoolManagerPool(const std::string &bp);
12  std::string base_path;
13  UUID uuid;
14  UUID default_via;
15  bool enabled = false;
16  std::string name;
17  std::vector<UUID> pools_included;
18  void save();
19 };
20 
21 class PoolManager {
22 public:
23  PoolManager();
24  static PoolManager &get();
25  static void init();
26  std::string get_pool_base_path(const UUID &uu);
27  void set_pool_enabled(const std::string &base_path, bool enabled);
28  bool get_pool_enabled(const std::string &base_path) const;
29  void add_pool(const std::string &base_path);
30  void remove_pool(const std::string &base_path);
31  void update_pool(const std::string &base_path, const PoolManagerPool &settings);
32  const std::map<std::string, PoolManagerPool> &get_pools() const;
33  const PoolManagerPool *get_by_uuid(const UUID &uu) const;
34 
35  typedef sigc::signal<void> type_signal_changed;
36  type_signal_changed signal_changed()
37  {
38  return s_signal_changed;
39  }
40 
41 private:
42  std::map<std::string, PoolManagerPool> pools;
43  void set_pool_enabled_no_write(const std::string &base_path, bool enabled);
44  void write();
45 
46  type_signal_changed s_signal_changed;
47 };
48 } // namespace horizon