00001 #ifndef OPENMM_PLATFORM_H_
00002 #define OPENMM_PLATFORM_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include <map>
00036 #include <string>
00037 #include <vector>
00038 #include "openmm/internal/windowsExport.h"
00039
00040 namespace OpenMM {
00041
00042 class Context;
00043 class ContextImpl;
00044 class Kernel;
00045 class KernelFactory;
00046
00064 class OPENMM_EXPORT Platform {
00065 public:
00066 virtual ~Platform();
00070 virtual const std::string& getName() const = 0;
00077 virtual double getSpeed() const = 0;
00082 virtual bool supportsDoublePrecision() const = 0;
00086 const std::vector<std::string>& getPropertyNames();
00094 virtual const std::string& getPropertyValue(const Context& context, const std::string& property) const;
00102 virtual void setPropertyValue(Context& context, const std::string& property, const std::string& value) const;
00110 const std::string& getPropertyDefaultValue(const std::string& property) const;
00118 void setPropertyDefaultValue(const std::string& property, const std::string& value);
00126 virtual void contextCreated(ContextImpl& context, const std::map<std::string, std::string>& properties) const;
00131 virtual void contextDestroyed(ContextImpl& context) const;
00140 void registerKernelFactory(const std::string& name, KernelFactory* factory);
00148 bool supportsKernels(const std::vector<std::string>& kernelNames) const ;
00161 Kernel createKernel(const std::string& name, ContextImpl& context) const;
00165 static void registerPlatform(Platform* platform);
00169 static int getNumPlatforms();
00173 static Platform& getPlatform(int index);
00178 static Platform& getPlatformByName(const std::string& name);
00186 static Platform& findPlatform(const std::vector<std::string>& kernelNames);
00199 static void loadPluginLibrary(const std::string& file);
00209 static std::vector<std::string> loadPluginsFromDirectory(const std::string& directory);
00217 static const std::string& getDefaultPluginsDirectory();
00221 static const std::string& getOpenMMVersion();
00222 protected:
00226 ContextImpl& getContextImpl(Context& context) const;
00230 const ContextImpl& getContextImpl(const Context& context) const;
00231 std::vector<std::string> platformProperties;
00232 private:
00233 std::map<std::string, KernelFactory*> kernelFactories;
00234 std::map<std::string, std::string> defaultProperties;
00235 static std::vector<Platform*>& getPlatforms();
00236 };
00237
00238 }
00239
00240 #endif