libvisual  0.5.0
lv_plugin_registry.h
1 #ifndef _LV_PLUGIN_REGISTRY_H
2 #define _LV_PLUGIN_REGISTRY_H
3 
4 #include <libvisual/lvconfig.h>
5 #include <libvisual/lv_defines.h>
6 
7 #ifdef __cplusplus
8 
9 #include <libvisual/lv_singleton.hpp>
10 #include <libvisual/lv_plugin.h>
11 #include <string>
12 #include <memory>
13 
14 namespace LV {
15 
16  typedef ::VisPluginType PluginType;
17 
23  class LV_API PluginRegistry
24  : public Singleton<PluginRegistry>
25  {
26  public:
27 
28  PluginRegistry (PluginRegistry const&) = delete;
29 
31  virtual ~PluginRegistry ();
32 
38  void add_path (std::string const& path);
39 
40  PluginRef const* find_plugin (PluginType type, std::string const& name) const;
41 
50  bool has_plugin (PluginType type, std::string const& name) const;
51 
57  PluginList const& get_plugins () const;
58 
66  PluginList const& get_plugins_by_type (PluginType type) const;
67 
76  VisPluginInfo const* get_plugin_info (PluginType type, std::string const& name) const;
77 
78  private:
79 
80  friend class System;
81 
82  class Impl;
83 
84  const std::unique_ptr<Impl> m_impl;
85 
86  PluginRegistry ();
87 
88  static void init ();
89  };
90 
91 } // LV namespace
92 
93 #endif /* __cplusplus */
94 
95 LV_BEGIN_DECLS
96 
97 LV_API void visual_plugin_registry_add_path (const char *path);
98 LV_API int visual_plugin_registry_has_plugin (VisPluginType type, const char *name);
99 
100 LV_END_DECLS
101 
102 #endif /*_LV_PLUGIN_REGISTRY_H */