![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2006 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: vrfPluginManager.h,v $ $Revision: 1.10 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef DTVRFPLUGINMANAGER_H_ 00013 #define DTVRFPLUGINMANAGER_H_ 00014 00015 #include <mtl/lispEnv.h> 00016 #include <vector> 00017 00018 #include "vrfcgf/vrfPluginExtension.h" 00019 00020 class DtDynamicLibrary; 00021 class DtVrfMessageInterface; 00022 class DtIfPluginDataRequest; 00023 class DtSimMessage; 00024 00034 00035 #include "vrfcgf/vrfcgfDefines.h" 00036 00037 class DT_DLL_vrfcgf DtVrfPlugin 00038 { 00039 public: 00040 DtVrfPlugin(const DtString &libName, 00041 bool addPlatExt = true, 00042 bool useLazyEval = true); 00043 00044 virtual ~DtVrfPlugin(); 00045 00047 virtual bool init(); 00048 00050 virtual bool checkVersion(const DtString& curVersion); 00051 00052 virtual bool initializePlugin(DtCgf*); 00053 virtual bool postInitializePlugin(DtCgf*); 00054 virtual void unloadPlugin(); 00055 00056 const DtVrfPluginInformation& pluginInformation() const; 00057 00059 virtual void pluginInformation(std::string&) const; 00060 00061 public: 00062 virtual bool isValid() const; 00063 virtual DtString libraryName() const; 00064 virtual const char *error() const; 00065 00066 protected: 00067 DtVrfPluginInformation myPluginInformation; 00068 DtInitializeVrfPluginFcn myInitializePlugin; 00069 DtPostInitializeVrfPluginFcn myPostInitializePlugin; 00070 DtPluginInformationFcn myPluginInformationFcn; 00071 DtVrfUnloadPluginFcn myUnloadPlugin; 00072 DtDynamicLibrary* myDynamicLibrary; 00073 }; 00074 00075 class DT_DLL_vrfcgf DtVrfPluginManager 00076 { 00077 public: 00078 00079 DtVrfPluginManager(); 00080 00082 virtual ~DtVrfPluginManager(); 00083 00084 const std::vector<DtVrfPlugin*>& plugins() const; 00085 00086 public: 00088 virtual bool init(); 00089 00091 virtual DtVrfPlugin* loadPlugin(const DtString&, DtCgf*); 00092 00094 virtual void postInitializePlugins(DtCgf*); 00095 00099 void setLoadIfVersionMismatch(bool); 00100 bool loadIfVersionMismatch() const; 00101 00103 virtual void setVrfMessageInterface(DtVrfMessageInterface*); 00104 00105 protected: 00106 00108 static void pluginInformationRequestCallback(DtSimMessage* msg, void* usr); 00109 virtual void processPluginInformationRequest(const DtIfPluginDataRequest& rsp); 00110 00111 protected: 00113 virtual DtVrfPlugin* loadPlugin(const DtString&); 00114 virtual void initializePlugin(DtVrfPlugin*, DtCgf*); 00115 00116 virtual void unloadPlugins(); 00117 00118 protected: 00119 std::vector<DtVrfPlugin*> myPlugins; 00120 bool myLoadIfVersionMismatch; 00121 DtVrfMessageInterface* myVrfMessageInterface; 00122 }; 00123 00124 inline const std::vector<DtVrfPlugin*>& DtVrfPluginManager::plugins() const 00125 { 00126 return myPlugins; 00127 } 00128 00129 inline const DtVrfPluginInformation& DtVrfPlugin::pluginInformation() const 00130 { 00131 return myPluginInformation; 00132 } 00133 00134 inline void DtVrfPluginManager::setLoadIfVersionMismatch(bool b) 00135 { 00136 myLoadIfVersionMismatch = b; 00137 } 00138 00139 inline bool DtVrfPluginManager::loadIfVersionMismatch() const 00140 { 00141 return myLoadIfVersionMismatch; 00142 } 00143 00144 #endif