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
#ifndef BASICPLUGINPROXY_H
00026
#define BASICPLUGINPROXY_H
00027
00028
#include <string>
00029
#include <list>
00030
#include <iostream>
00031
#include <stdlib.h>
00032
00033
#include "BasicPluginManager.h"
00034
#include "BasicPluginInfo.h"
00035
#include "BasicException.h"
00036
#include "BasicClassFactory.h"
00037
00038
template <
class B,
class T>
00039 class BasicPluginProxy {
00040
public:
00041 BasicPluginProxy(
const std::string name,
const std::string description,
00042
BasicPluginManager<B> *manager)
00043 {
init(
new BasicPluginInfo(name, description), manager);}
00044
00045 BasicPluginProxy(
const std::string name,
const std::string description,
00046
const unsigned int numDeps,
const char *deps[],
00047
BasicPluginManager<B> *manager)
00048 {
init(
new BasicPluginInfo(name, description, numDeps, deps), manager);}
00049
00050 BasicPluginProxy(
const BasicPluginInfo &info,
BasicPluginManager<B> *manager)
00051 {
init(
new BasicPluginInfo(info), manager);}
00052
00053
protected:
00060 virtual void init(
BasicPluginInfo *info,
BasicPluginManager<B> *manager) {
00061
try {
00062
if (!manager) {
00063 std::cerr <<
"BasicPluginProxyBase() manager cannot be NULL!"
00064 << std::endl;
00065 exit(1);
00066 }
00067
00068 manager->
registerPlugin(info,
new BasicClassFactory<B, T>);
00069
00070 }
catch (
BasicException &e) {
00071 manager->
setPluginException(e);
00072
00073 }
catch (...) {
00074 manager->
setPluginException
00075 (
BasicException(
"Unknown exception during registration!"));
00076 }
00077 }
00078 };
00079
00080
#endif