StateFS
 All Classes Files Functions Variables Typedefs Enumerations Groups Pages
statefs.hpp
1 #ifndef _STATEFS_PRIVATE_HPP_
2 #define _STATEFS_PRIVATE_HPP_
3 
4 #include <statefs/config.hpp>
5 
6 #include <statefs/provider.h>
7 #include <statefs/loader.hpp>
8 #include <cor/so.hpp>
9 
10 #include <ostream>
11 #include <tuple>
12 #include <memory>
13 #include <map>
14 
15 std::tuple<int, std::string>
16 dump_plugin_meta(std::ostream &dst, std::string const &path);
17 bool ensure_dir_exists(std::string const &);
18 
19 typedef std::unique_ptr
20 <statefs_provider, void (*)(statefs_provider*)> provider_handle_type;
21 typedef std::unique_ptr
22 <statefs_namespace, void (*)(statefs_namespace*)> ns_handle_type;
23 typedef std::unique_ptr
24 <statefs_property, void (*)(statefs_property*)> property_handle_type;
25 
26 ns_handle_type mk_namespace_handle(statefs_namespace *ns);
27 property_handle_type mk_property_handle(statefs_property *p);
28 
29 
30 class Loader
31 {
32  typedef std::unique_ptr<statefs::Loader> impl_ptr;
33 public:
34  Loader(std::string const&);
35  bool is_valid() const;
36  statefs::provider_ptr load(std::string const&, statefs_server*);
37  bool is_reloadable() const;
38  std::string name() const;
39 private:
40  Loader(Loader const&);
41  Loader& operator =(Loader const&);
42 
43  static std::string loader_path(std::string const&);
44  static impl_ptr create(cor::SharedLib &);
45  cor::SharedLib lib_;
46  impl_ptr impl_;
47 };
48 
50 {
51 public:
52  std::shared_ptr<Loader> loader_get(std::string const&);
53  typedef std::shared_ptr<config::Loader> loader_info_ptr;
54 
55  bool loader_register(loader_info_ptr p);
56  bool loader_rm(std::string const&);
57 
58 private:
59 
60  std::map<std::string, std::shared_ptr<Loader> > loaders_;
61  std::map<std::string, loader_info_ptr> info_;
62 };
63 
64 #endif // _STATEFS_PRIVATE_HPP_