00001
00002
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 #ifndef OW_PerlPROVIDERIFC_HPP_
00031 #define OW_PerlPROVIDERIFC_HPP_
00032 #include "OW_config.h"
00033 #include "OW_SharedLibrary.hpp"
00034 #include "OW_ProviderIFCBaseIFC.hpp"
00035 #include "OW_Map.hpp"
00036 #include "OW_MutexLock.hpp"
00037 #include "OW_FTABLERef.hpp"
00038
00039 namespace OW_NAMESPACE
00040 {
00041
00046 class PerlProviderIFC : public ProviderIFCBaseIFC
00047 {
00048 public:
00049 static const char * const CREATIONFUNC;
00050 PerlProviderIFC();
00051 ~PerlProviderIFC();
00052 protected:
00053 virtual const char* getName() const { return "perl"; }
00054 virtual void doInit(const ProviderEnvironmentIFCRef& env,
00055 InstanceProviderInfoArray& i,
00056 SecondaryInstanceProviderInfoArray& si,
00057 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00058 AssociatorProviderInfoArray& a,
00059 #endif
00060 MethodProviderInfoArray& m,
00061 IndicationProviderInfoArray& ind);
00062 virtual InstanceProviderIFCRef doGetInstanceProvider(
00063 const ProviderEnvironmentIFCRef& env,
00064 const char* provIdString);
00065 virtual MethodProviderIFCRef doGetMethodProvider(
00066 const ProviderEnvironmentIFCRef& env,
00067 const char* provIdString);
00068 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00069 virtual AssociatorProviderIFCRef doGetAssociatorProvider(
00070 const ProviderEnvironmentIFCRef& env,
00071 const char* provIdString);
00072 #endif
00073 virtual IndicationProviderIFCRef doGetIndicationProvider(
00074 const ProviderEnvironmentIFCRef& env,
00075 const char* provIdString);
00076 virtual IndicationExportProviderIFCRefArray doGetIndicationExportProviders(
00077 const ProviderEnvironmentIFCRef& env
00078 );
00079 virtual PolledProviderIFCRefArray doGetPolledProviders(
00080 const ProviderEnvironmentIFCRef& env
00081 );
00082 void loadProviders(const ProviderEnvironmentIFCRef& env,
00083 InstanceProviderInfoArray& i,
00084 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00085 AssociatorProviderInfoArray& a,
00086 #endif
00087 MethodProviderInfoArray& m,
00088 IndicationProviderInfoArray& ind);
00089 virtual void doUnloadProviders(const ProviderEnvironmentIFCRef& env)
00090 {
00091
00092 }
00093 private:
00094 typedef Map<String, FTABLERef> ProviderMap;
00095
00096 typedef Array<FTABLERef > LoadedProviderArray;
00097 FTABLERef getProvider(const ProviderEnvironmentIFCRef& env,
00098 const char* provIdString);
00099 void loadNoIdProviders(const ProviderEnvironmentIFCRef& env);
00100 ProviderMap m_provs;
00101 Mutex m_guard;
00102 LoadedProviderArray m_noidProviders;
00103 bool m_loadDone;
00104 };
00105 typedef SharedLibraryReference< Reference<PerlProviderIFC> > PerlProviderIFCRef;
00106
00107 }
00108
00109 #endif