00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00025 #ifndef TAO_PLUGIN_H
00026 #define TAO_PLUGIN_H
00027
00028 #include<iostream>
00029
00031
00032
00033
00034
00036
00037 #ifdef WIN32
00038 #define TAO_DLL __declspec(dllexport)
00039 #else
00040 #define TAO_DLL
00041 #endif
00042
00045 #define TAO_PLUGIN(x) public:\
00046 x(char*y){ _Tao_Plugin_Proxy.addPlugin(this,y); } private:
00047
00049 #define TAO_PLUGIN_PROXY TAO_DLL TaoPluginProxy _Tao_Plugin_Proxy;
00050
00053 #define INIT_TAO_PLUGIN TAO_PLUGIN_PROXY
00054
00058
00059 #include"taoCpptype.h"
00060
00061 using namespace std;
00062
00063 class TaoPlugin;
00064
00066
00069 class TaoPluginProxy
00070 {
00071 TaoPlugin **plugins;
00072 char **names;
00073
00074 int size;
00075 int nplg;
00076
00077 public:
00078 TaoPluginProxy(){ size=nplg=0; }
00079
00080 void addPlugin(TaoPlugin *plg, char *name){
00081 if( nplg+2 > size ){
00082 size += 100;
00083 plugins=(TaoPlugin**)realloc( plugins, size*sizeof(TaoPlugin*) );
00084 names=(char**)realloc( names, size*sizeof(char*) );
00085 }
00086 plugins[ nplg ] = plg;
00087 names[ nplg ] = name;
00088 nplg++;
00089 }
00090 TaoPlugin** getPlugins(){ return plugins; }
00091 char** getNames(){ return names; }
00092 int getPlgNumber(){ return nplg; }
00093 };
00094
00095 extern TaoPluginProxy _Tao_Plugin_Proxy;
00096
00098
00142 class TaoPlugin : public TcBase
00143 {
00144 public:
00145 TaoPlugin(){}
00146 virtual ~TaoPlugin(){}
00147
00149 short type()const{ return TAO_PLUGIN; }
00152 virtual short rtti()const{ return TAO_PLUGIN; }
00153
00155 virtual TaoPlugin* newObject( TcArray *param=0 ){
00156 return new TaoPlugin();
00157 }
00159 virtual void runMethod( const char *funame, TcArray *in=0,TcArray *out=0)
00160 {
00161 cout<<"TaoPlugin::runMethod() is not reimplemented.\n";
00162
00163
00164
00165
00166
00167
00168
00169
00170 }
00173 virtual void print( ostream *out=0, bool reserved=0 ){
00174 if( out==0 ) out=&cout;
00175 *out<<"TaoPlugin"<<this;
00176 }
00179 virtual void help( ostream *out=0 ){
00180 if( out==0 ) out=&cout;
00181 *out<<"No method is provided through TaoPlugin::runMethod().\n";
00182 }
00183 };
00184
00185 #endif