00001 #pragma once
00002 #ifndef PLUGIN_INTERFACE_H
00003 #define PLUGIN_INTERFACE_H
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <string>
00022 #include <vector>
00023 #include <iostream>
00024
00025
00026 namespace Gfal{
00027
00028
00032 class PluginLink {
00033 public:
00034 PluginLink(){};
00035 virtual ~PluginLink(){};
00036
00041 template<typename T>
00042 T get_sym_s(const std::string & str) const;
00047 virtual void* get_sym(const std::string & str) const =0;
00048
00052 virtual void* plugin_data()= 0;
00053
00054 };
00055
00056
00057 template<typename T>
00058 T PluginLink::get_sym_s(const std::string & str) const {
00059 return reinterpret_cast<T>(this->get_sym(str));
00060 }
00061
00062
00063 typedef std::vector<PluginLink* > VectorPlugin;
00064
00065 class PluginFactory{
00066 public:
00067 PluginFactory(){};
00068 virtual ~PluginFactory(){};
00069
00073 virtual const VectorPlugin& get_plugin_links() =0;
00074
00075
00076 };
00077
00078 }
00079 #endif