00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025 #ifndef PLUMA_HOST_HPP
00026 #define PLUMA_HOST_HPP
00027
00029
00031 #include <Pluma/Config.hpp>
00032 #include <Pluma/Provider.hpp>
00033
00034 #include <vector>
00035 #include <list>
00036 #include <map>
00037
00038 namespace pluma{
00039
00044 class PLUMA_API Host{
00045 friend class PluginManager;
00046 friend class Provider;
00047
00048
00049 public:
00050
00062 bool add(Provider* provider);
00063
00064
00065 private:
00066
00073 Host();
00074
00081 ~Host();
00082
00091 bool knows(const std::string& type) const;
00092
00101 unsigned int getVersion(const std::string& type) const;
00102
00111 unsigned int getLowestVersion(const std::string& type) const;
00112
00121 void registerType(const std::string& type, unsigned int version, unsigned int lowestVersion);
00122
00132 const std::list<Provider*>* getProviders(const std::string& type) const;
00133
00138 void clearProviders();
00139
00146 bool validateProvider(Provider* provider) const;
00147
00160 bool registerProvider(Provider* provider);
00161
00170 void cancelAddictions();
00171
00182 bool confirmAddictions();
00183
00184
00185
00187
00189
00190 private:
00191
00196 struct ProviderInfo{
00197 unsigned int version;
00198 unsigned int lowestVersion;
00199 std::list<Provider*> providers;
00200 };
00201
00202 typedef std::map<std::string, ProviderInfo > ProvidersMap;
00203 typedef std::map<std::string, std::list<Provider*> > TempProvidersMap;
00204
00205 ProvidersMap knownTypes;
00206 TempProvidersMap addRequests;
00207
00208 };
00209
00210 }
00211
00212 #endif // PLUMA_HOST_HPP