12 #ifndef ROOT_TPluginManager
13 #define ROOT_TPluginManager
102 class TPluginHandler :
public TObject {
104 friend class TPluginManager;
107 using AtomicInt_t = std::atomic<Int_t>;
115 TMethodCall *fCallEnv;
117 AtomicInt_t fCanCall;
122 fBase(), fRegexp(), fClass(), fPlugin(), fCtor(), fOrigin(),
123 fCallEnv(0), fMethod(0), fCanCall(0), fIsMacro(kTRUE), fIsGlobal(kTRUE) { }
124 TPluginHandler(
const char *base,
const char *regexp,
125 const char *className,
const char *pluginName,
126 const char *ctor,
const char *origin);
127 TPluginHandler(
const TPluginHandler&);
128 TPluginHandler& operator=(
const TPluginHandler&);
132 const char *GetBase()
const {
return fBase; }
133 const char *GetRegexp()
const {
return fRegexp; }
134 const char *GetPlugin()
const {
return fPlugin; }
135 const char *GetCtor()
const {
return fCtor; }
136 const char *GetOrigin()
const {
return fOrigin; }
138 Bool_t CanHandle(
const char *base,
const char *uri);
141 Bool_t CheckForExecPlugin(Int_t nargs);
144 const char *GetClass()
const {
return fClass; }
145 Int_t CheckPlugin()
const;
148 template <
typename... T> Long_t ExecPluginImpl(
const T&... params)
150 auto nargs =
sizeof...(params);
151 if (!CheckForExecPlugin(nargs))
return 0;
157 R__LOCKGUARD(gInterpreterMutex);
158 fCallEnv->SetParams(params...);
161 fCallEnv->Execute(ret);
166 template <
typename... T> Long_t ExecPlugin(
int nargs,
const T&... params)
169 if ((gDebug > 1) && (nargs != (
int)
sizeof...(params))) {
170 Warning(
"ExecPlugin",
"Announced number of args different from the real number of argument passed %d vs %lu",
171 nargs, (
unsigned long)
sizeof...(params) );
173 return ExecPluginImpl(params...);
176 void Print(Option_t *opt =
"")
const;
178 ClassDef(TPluginHandler,3)
182 class TPluginManager :
public TObject {
186 THashTable *fBasesLoaded;
189 TPluginManager(
const TPluginManager& pm);
190 TPluginManager& operator=(
const TPluginManager& pm);
191 void LoadHandlerMacros(
const char *path);
194 TPluginManager() : fHandlers(0), fBasesLoaded(0), fReadingDirs(kFALSE) { }
197 void LoadHandlersFromEnv(TEnv *env);
198 void LoadHandlersFromPluginDirs(
const char *base = 0);
199 void AddHandler(
const char *base,
const char *regexp,
200 const char *className,
const char *pluginName,
201 const char *ctor = 0,
const char *origin = 0);
202 void RemoveHandler(
const char *base,
const char *regexp = 0);
204 TPluginHandler *FindHandler(
const char *base,
const char *uri = 0);
206 void Print(Option_t *opt =
"")
const;
207 Int_t WritePluginMacros(
const char *dir,
const char *plugin = 0)
const;
208 Int_t WritePluginRecords(
const char *envFile,
const char *plugin = 0)
const;
210 ClassDef(TPluginManager,1)
213 R__EXTERN TPluginManager *gPluginMgr;