TPluginManager This class implements a plugin library manager. It keeps track of a list of plugin handlers. A plugin handler knows which plugin library to load to get a specific class that is used to extend the functionality of a specific base class and how to create an object of this class. For example, to extend the base class TFile to be able to read RFIO files one needs to load the plugin library libRFIO.so which defines the TRFIOFile class. This loading should be triggered when a given URI contains a regular expression defined by the handler. Plugin handlers can be defined via macros in a list of plugin directories. With $ROOTSYS/etc/plugins the default top plugin directory specified in $ROOTSYS/etc/system.rootrc. Additional directories can be specified by adding them to the end of the list. Macros for identical plugin handlers in later directories will override previous ones (the inverse of normal search path behavior). The macros must have names like <BaseClass>/PX0_<PluginClass>.C, e.g.: TFile/P10_TRFIOFile.C, TSQLServer/P20_TMySQLServer.C, etc. to allow easy sorting and grouping. If the BaseClass is in a namespace the directory must have the name NameSpace@@BaseClass as : is a reserved pathname character on some operating systems. Macros not beginning with 'P' and ending with ".C" are ignored. These macros typically look like: void P10_TDCacheFile() { gPluginMgr->AddHandler("TFile", "^dcache", "TDCacheFile", "DCache", "TDCacheFile(const char*,Option_t*)"); } Plugin handlers can also be defined via resources in the .rootrc file. Although now deprecated this method still works for backward compatibility, e.g.: Plugin.TFile: ^rfio: TRFIOFile RFIO "<constructor>" Plugin.TSQLServer: ^mysql: TMySQLServer MySQL "<constructor>" +Plugin.TSQLServer: ^pgsql: TPgSQLServer PgSQL "<constructor>" Plugin.TVirtualFitter: * TFitter Minuit "TFitter(Int_t)" Where the + in front of Plugin.TSQLServer says that it extends the existing definition of TSQLServer, useful when there is more than one plugin that can extend the same base class. The "<constructor>" should be the constructor or a static method that generates an instance of the specified class. Global methods should start with "::" in their name, like "::CreateFitter()". Instead of being a shared library a plugin can also be a CINT script, so instead of libDialog.so one can have Dialog.C. The * is a placeholder in case there is no need for a URI to differentiate between different plugins for the same base class. For the default plugins see $ROOTSYS/etc/system.rootrc. Plugin handlers can also be registered at run time, e.g.: gPluginMgr->AddHandler("TSQLServer", "^sapdb:", "TSapDBServer", "SapDB", "TSapDBServer(const char*,const char*, const char*)"); A list of currently defined handlers can be printed using: gPluginMgr->Print(); // use option="a" to see ctors The use of the plugin library manager removes all textual references to hard-coded class and library names and the resulting dependencies in the base classes. The plugin manager is used to extend a.o. TFile, TSQLServer, TGrid, etc. functionality.
TPluginManager() | |
virtual | ~TPluginManager() |
void | TObject::AbstractMethod(const char* method) const |
void | AddHandler(const char* base, const char* regexp, const char* className, const char* pluginName, const char* ctor = 0, const char* origin = 0) |
virtual void | TObject::AppendPad(Option_t* option = "") |
virtual void | TObject::Browse(TBrowser* b) |
static TClass* | Class() |
virtual const char* | TObject::ClassName() const |
virtual void | TObject::Clear(Option_t* = "") |
virtual TObject* | TObject::Clone(const char* newname = "") const |
virtual Int_t | TObject::Compare(const TObject* obj) const |
virtual void | TObject::Copy(TObject& object) const |
virtual void | TObject::Delete(Option_t* option = "")MENU |
virtual Int_t | TObject::DistancetoPrimitive(Int_t px, Int_t py) |
virtual void | TObject::Draw(Option_t* option = "") |
virtual void | TObject::DrawClass() constMENU |
virtual TObject* | TObject::DrawClone(Option_t* option = "") constMENU |
virtual void | TObject::Dump() constMENU |
virtual void | TObject::Error(const char* method, const char* msgfmt) const |
virtual void | TObject::Execute(const char* method, const char* params, Int_t* error = 0) |
virtual void | TObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0) |
virtual void | TObject::ExecuteEvent(Int_t event, Int_t px, Int_t py) |
virtual void | TObject::Fatal(const char* method, const char* msgfmt) const |
TPluginHandler* | FindHandler(const char* base, const char* uri = 0) |
virtual TObject* | TObject::FindObject(const char* name) const |
virtual TObject* | TObject::FindObject(const TObject* obj) const |
virtual Option_t* | TObject::GetDrawOption() const |
static Long_t | TObject::GetDtorOnly() |
virtual const char* | TObject::GetIconName() const |
virtual const char* | TObject::GetName() const |
virtual char* | TObject::GetObjectInfo(Int_t px, Int_t py) const |
static Bool_t | TObject::GetObjectStat() |
virtual Option_t* | TObject::GetOption() const |
virtual const char* | TObject::GetTitle() const |
virtual UInt_t | TObject::GetUniqueID() const |
virtual Bool_t | TObject::HandleTimer(TTimer* timer) |
virtual ULong_t | TObject::Hash() const |
virtual void | TObject::Info(const char* method, const char* msgfmt) const |
virtual Bool_t | TObject::InheritsFrom(const char* classname) const |
virtual Bool_t | TObject::InheritsFrom(const TClass* cl) const |
virtual void | TObject::Inspect() constMENU |
void | TObject::InvertBit(UInt_t f) |
virtual TClass* | IsA() const |
virtual Bool_t | TObject::IsEqual(const TObject* obj) const |
virtual Bool_t | TObject::IsFolder() const |
Bool_t | TObject::IsOnHeap() const |
virtual Bool_t | TObject::IsSortable() const |
Bool_t | TObject::IsZombie() const |
void | LoadHandlersFromEnv(TEnv* env) |
void | LoadHandlersFromPluginDirs(const char* base = 0) |
virtual void | TObject::ls(Option_t* option = "") const |
void | TObject::MayNotUse(const char* method) const |
virtual Bool_t | TObject::Notify() |
void | TObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const |
static void | TObject::operator delete(void* ptr) |
static void | TObject::operator delete(void* ptr, void* vp) |
static void | TObject::operator delete[](void* ptr) |
static void | TObject::operator delete[](void* ptr, void* vp) |
void* | TObject::operator new(size_t sz) |
void* | TObject::operator new(size_t sz, void* vp) |
void* | TObject::operator new[](size_t sz) |
void* | TObject::operator new[](size_t sz, void* vp) |
virtual void | TObject::Paint(Option_t* option = "") |
virtual void | TObject::Pop() |
virtual void | Print(Option_t* opt = "") const |
virtual Int_t | TObject::Read(const char* name) |
virtual void | TObject::RecursiveRemove(TObject* obj) |
void | RemoveHandler(const char* base, const char* regexp = 0) |
void | TObject::ResetBit(UInt_t f) |
virtual void | TObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU |
virtual void | TObject::SavePrimitive(ostream& out, Option_t* option = "") |
void | TObject::SetBit(UInt_t f) |
void | TObject::SetBit(UInt_t f, Bool_t set) |
virtual void | TObject::SetDrawOption(Option_t* option = "")MENU |
static void | TObject::SetDtorOnly(void* obj) |
static void | TObject::SetObjectStat(Bool_t stat) |
virtual void | TObject::SetUniqueID(UInt_t uid) |
virtual void | ShowMembers(TMemberInspector&) |
virtual void | Streamer(TBuffer&) |
void | StreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b) |
virtual void | TObject::SysError(const char* method, const char* msgfmt) const |
Bool_t | TObject::TestBit(UInt_t f) const |
Int_t | TObject::TestBits(UInt_t f) const |
virtual void | TObject::UseCurrentStyle() |
virtual void | TObject::Warning(const char* method, const char* msgfmt) const |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const |
Int_t | WritePluginMacros(const char* dir, const char* plugin = 0) const |
Int_t | WritePluginRecords(const char* envFile, const char* plugin = 0) const |
virtual void | TObject::DoError(int level, const char* location, const char* fmt, va_list va) const |
void | TObject::MakeZombie() |
TPluginManager(const TPluginManager& pm) | |
void | LoadHandlerMacros(const char* path) |
TPluginManager& | operator=(const TPluginManager& pm) |
enum TObject::EStatusBits { | kCanDelete | |
kMustCleanup | ||
kObjInCanvas | ||
kIsReferenced | ||
kHasUUID | ||
kCannotPick | ||
kNoContextMenu | ||
kInvalidObject | ||
}; | ||
enum TObject::[unnamed] { | kIsOnHeap | |
kNotDeleted | ||
kZombie | ||
kBitMask | ||
kSingleKey | ||
kOverwrite | ||
kWriteDelete | ||
}; |
THashTable* | fBasesLoaded | ! table of base classes already checked or loaded |
TList* | fHandlers | list of plugin handlers |
Bool_t | fReadingDirs | ! true if we are running LoadHandlersFromPluginDirs |
Load plugin handlers specified in config file, like: Plugin.TFile: ^rfio: TRFIOFile RFIO "TRFIOFile(...)" Plugin.TSQLServer: ^mysql: TMySQLServer MySQL "TMySQLServer(...)" +Plugin.TSQLServer: ^pgsql: TPgSQLServer PgSQL "TPgSQLServer(...)" The + allows the extension of an already defined resource (see TEnv).
Load all plugin macros from the specified path/base directory.
Load plugin handlers specified via macros in a list of plugin directories. The $ROOTSYS/etc/plugins is the default top plugin directory specified in $ROOTSYS/etc/system.rootrc. The macros must have names like <BaseClass>/PX0_<PluginClass>.C, e.g.: TFile/P10_TRFIOFile.C, TSQLServer/P20_TMySQLServer.C, etc. to allow easy sorting and grouping. If the BaseClass is in a namespace the directory must have the name NameSpace@@BaseClass as : is a reserved pathname character on some operating systems. Macros not beginning with 'P' and ending with ".C" are ignored. If base is specified only plugin macros for that base class are loaded. The macros typically should look like: void P10_TDCacheFile() { gPluginMgr->AddHandler("TFile", "^dcache", "TDCacheFile", "DCache", "TDCacheFile(const char*,Option_t*,const char*,Int_t)"); } In general these macros should not cause side effects, by changing global ROOT state via, e.g. gSystem calls, etc. However, in specific cases this might be useful, e.g. adding a library search path, adding a specific dependency, check on some OS or ROOT capability or downloading of the plugin.
Add plugin handler to the list of handlers. If there is already a handler defined for the same base and regexp it will be replaced.
Remove handler for the specified base class and the specified regexp. If regexp=0 remove all handlers for the specified base.
Returns the handler if there exists a handler for the specified URI. The uri can be 0 in which case the first matching plugin handler will be returned. Returns 0 in case handler is not found.
Print list of registered plugin handlers. If option is "a" print also the ctor's that will be used.
Write in the specified directory the plugin macros. If plugin is specified and if it is a base class all macros for that base will be written. If it is a plugin class name, only that one macro will be written. If plugin is 0 all macros are written. Returns -1 if dir does not exist, 0 otherwise.
Write in the specified environment config file the plugin records. If plugin is specified and if it is a base class all records for that base will be written. If it is a plugin class name, only that one record will be written. If plugin is 0 all macros are written. If envFile is 0 or "" the records are written to stdout. Returns -1 if envFile cannot be created or opened, 0 otherwise.