Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

External::PluginFactory Class Reference

#include <PluginFactory.h>

Inheritance diagram for External::PluginFactory:

Inheritance graph
[legend]
Collaboration diagram for External::PluginFactory:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 PluginFactory (String *pluginLibName)
virtual ~PluginFactory (void)
virtual void newInstanceSelector (String *selector)
virtual void pluginNameSelector (String *selector)
virtual PluginnewPluginInstance (void)
virtual StringpluginName (void)

Static Public Member Functions

static Setplugins (void)
static PluginFactorypluginWithName (String *pluginName)

Protected Attributes

Stringname
Stringnew_instance_selector
Stringplugin_name_selector

Static Protected Attributes

static Set_plugins = nil
static String defaultNewInstanceSelector
static String defaultPluginNameSelector

Constructor & Destructor Documentation

PluginFactory::PluginFactory String pluginLibName  ) 
 

Definition at line 38 of file PluginFactory.cc.

References defaultNewInstanceSelector, defaultPluginNameSelector, name, new_instance_selector, nil, plugin_name_selector, and plugins().

00039   : ExternalInterface(pluginLibName)
00040 {
00041     plugins()->add(this);
00042     name = nil;
00043     new_instance_selector = &defaultNewInstanceSelector;
00044     plugin_name_selector = &defaultPluginNameSelector;
00045 }

PluginFactory::~PluginFactory void   )  [virtual]
 

Definition at line 47 of file PluginFactory.cc.

References name, nil, and plugins().

00048 {
00049     plugins()->remove(this);
00050     name = nil;
00051 }


Member Function Documentation

void PluginFactory::newInstanceSelector String selector  )  [virtual]
 

Definition at line 61 of file PluginFactory.cc.

References new_instance_selector.

00062 {
00063     new_instance_selector = selector;
00064 }

Plugin * PluginFactory::newPluginInstance void   )  [virtual]
 

Definition at line 86 of file PluginFactory.cc.

References new_instance_selector, and External::ExternalInterface::symbol().

00087 {
00088     Plugin *(*creator)(void);
00089 
00090     creator = (Plugin *(*)(void)) symbol(new_instance_selector);
00091     return(creator());
00092 }

String * PluginFactory::pluginName void   )  [virtual]
 

Definition at line 94 of file PluginFactory.cc.

References name, nil, plugin_name_selector, and External::ExternalInterface::symbol().

Referenced by pluginWithName().

00095 {
00096     String *(*function)(void);
00097 
00098     if (name == nil) {
00099         function = (String *(*)(void)) symbol(plugin_name_selector);
00100         name = function();
00101     }
00102     return name;
00103 }

void PluginFactory::pluginNameSelector String selector  )  [virtual]
 

Definition at line 66 of file PluginFactory.cc.

References plugin_name_selector.

00067 {
00068     plugin_name_selector = selector;
00069 }

Set * PluginFactory::plugins void   )  [static]
 

Definition at line 54 of file PluginFactory.cc.

References _plugins, and nil.

Referenced by PluginFactory(), pluginWithName(), and ~PluginFactory().

00055 {
00056     if (_plugins == nil) _plugins = new Set;
00057     return _plugins;
00058 }

PluginFactory * PluginFactory::pluginWithName String pluginName  )  [static]
 

Definition at line 72 of file PluginFactory.cc.

References nil, pluginName(), and plugins().

00073 {
00074     for (Iterator *i = plugins()->iterator(); !i->finished(); i->next()) {
00075         PluginFactory *plug = (PluginFactory *) i->value();
00076         if (plug->pluginName()->isEqual(pluginName)) {
00077             delete i;
00078             return plug;
00079         }
00080     }
00081     (new KeyNotFoundError(__PRETTY_FUNCTION__, pluginName))->raise();
00082     return nil; // Unreachable, but keeps compiler happy
00083 }


Member Data Documentation

Set * PluginFactory::_plugins = nil [static, protected]
 

Definition at line 34 of file PluginFactory.cc.

Referenced by plugins().

String PluginFactory::defaultNewInstanceSelector [static, protected]
 

Referenced by PluginFactory().

String PluginFactory::defaultPluginNameSelector [static, protected]
 

Referenced by PluginFactory().

String* External::PluginFactory::name [protected]
 

Definition at line 40 of file PluginFactory.h.

Referenced by PluginFactory(), pluginName(), and ~PluginFactory().

String* External::PluginFactory::new_instance_selector [protected]
 

Definition at line 45 of file PluginFactory.h.

Referenced by newInstanceSelector(), newPluginInstance(), and PluginFactory().

String* External::PluginFactory::plugin_name_selector [protected]
 

Definition at line 46 of file PluginFactory.h.

Referenced by PluginFactory(), pluginName(), and pluginNameSelector().


The documentation for this class was generated from the following files:
Generated on Mon Nov 27 09:52:13 2006 for Smalltalk like C++ Class Library by  doxygen 1.4.2