IComponentManager.h
1
26
27#ifndef COSMO_COMPONENT_MANAGER_INTERFACE_H
28#define COSMO_COMPONENT_MANAGER_INTERFACE_H
29
30#include <Pt/Cosmo/Api.h>
31#include <Pt/Cosmo/IUnknown.h>
32#include <Pt/Cosmo/ComponentInfo.h>
33#include <Pt/Cosmo/IEnumerable.h>
34
35#include <string>
36#include <vector>
37#include <stdexcept>
38
39namespace Pt {
40
41namespace Cosmo {
42
44
55{
56 public:
60 {}
61
65 const std::string& require,
66 const std::string& instance);
67
70 void load();
71
74 void load(const std::string& instance);
75
78 void unload(IComponentPlugin& plugin);
79
82 void unload(const std::string& instanceId);
83
87 {
88 return onGetComponents();
89 }
90
91 protected:
95 const std::string& require,
96 const std::string& instance) = 0;
97
98
101 virtual void onLoad() = 0;
102
105 virtual void onLoadInstance(const std::string& instanceId) = 0;
106
109 virtual void onUnload(IComponentPlugin& plugin) = 0;
110
113 virtual IComponentPlugin* onUnloadInstance(const std::string& instanceId) = 0;
114
117 virtual const IEnumerable<ComponentInfo>& onGetComponents() const = 0;
118};
119
120} // namespace Cosmo
121
122} // namespace Pt
123
124#include <Pt/Cosmo/IComponentPlugin.h>
125
126namespace Pt {
127
128namespace Cosmo {
129
131 const std::string& require,
132 const std::string& instance)
133{
134 plugin.onAttach(*this, instance);
135 onRegisterComponent(plugin, require, instance);
136}
137
138
140{
141 onLoad();
142}
143
144
145inline void IComponentManager::load(const std::string& instance)
146{
147 onLoadInstance(instance);
148}
149
150
152{
153 onUnload(plugin);
154 plugin.onDetach(*this);
155}
156
157
158inline void IComponentManager::unload(const std::string& instanceId)
159{
160 IComponentPlugin* plugin = onUnloadInstance(instanceId);
161 if(plugin)
162 plugin->onDetach(*this, instanceId);
163}
164
165} // namespace Cosmo
166
167} // namespace Pt
168
169#endif
Component manager interface.
Definition IComponentManager.h:55
virtual void onUnload(IComponentPlugin &plugin)=0
Unloads a plugin and all components using it.
const IEnumerable< ComponentInfo > & components() const
Returns component infos.
Definition IComponentManager.h:86
virtual void onLoadInstance(const std::string &instanceId)=0
Loads a component instance.
virtual void onRegisterComponent(IComponentPlugin &plugin, const std::string &require, const std::string &instance)=0
Registers component.
virtual IComponentPlugin * onUnloadInstance(const std::string &instanceId)=0
Unloads a component instance.
virtual void onLoad()=0
Loads all registered components.
void registerComponent(IComponentPlugin &plugin, const std::string &require, const std::string &instance)
Registers component.
Definition IComponentManager.h:130
void load()
Loads all registered components.
Definition IComponentManager.h:139
virtual const IEnumerable< ComponentInfo > & onGetComponents() const =0
Returns component infos.
void unload(IComponentPlugin &plugin)
Unloads a component plugin.
Definition IComponentManager.h:151
virtual ~IComponentManager()
Destructor.
Definition IComponentManager.h:59
Component plugin interface.
Definition IComponentPlugin.h:51
virtual void onDetach(IComponentManager &cm, const std::string &instance)=0
The plugin is detached from a component manager.
virtual void onAttach(IComponentManager &cm, const std::string &instance)=0
The plugin is attached to a component manager.
Enumerable interface.
Definition IEnumerable.h:58
Interface base class.
Definition IUnknown.h:44
Cosmo Component Model.
Definition Api.h:53
Core module.
Definition Allocator.h:33