00001 #ifndef TAPGENERATORFACTORY__HH_
00002 #define TAPGENERATORFACTORY__HH_
00003 #include "TemplateFactory.h"
00004 #include "IdSource.h"
00005 #include "IdGenerator.h"
00006
00007 class TVAnalysedPulseGenerator;
00008 class TAPGeneratorOptions;
00009
00010 class TAPGeneratorFactory:public TemplateFactory<TVAnalysedPulseGenerator,TAPGeneratorOptions>{
00011 private:
00012 TAPGeneratorFactory():
00013 TemplateFactory<TVAnalysedPulseGenerator,TAPGeneratorOptions>("TAPGeneratorFactory"){};
00014 ~TAPGeneratorFactory(){};
00015
00016 public:
00017
00018 std::string GetTAPType(const IDs::source& s){
00019 return GetTAPType(s.Generator());
00020 }
00021
00022 std::string GetTAPType(const IDs::generator& g){
00023 std::string gen=g.Type();
00024 size_t n_subtract=gen.find("APGenerator");
00025 if(n_subtract!=std::string::npos)
00026 gen.erase(n_subtract);
00027 return GetProduct(gen);
00028 }
00029
00030
00031 static TAPGeneratorFactory* Instance();
00032 };
00033
00034 inline TAPGeneratorFactory* TAPGeneratorFactory::Instance(){
00035 static TAPGeneratorFactory* instance=NULL;
00036 if(!instance) {
00037 instance=new TAPGeneratorFactory();
00038 }
00039 return instance;
00040 }
00041
00042 #define ALCAP_TAP_GENERATOR__( NAME, CLASS, ARGUMENTS) \
00043 RegistryProxy<CLASS,TVAnalysedPulseGenerator,TAPGeneratorOptions,TAPGeneratorFactory> \
00044 p_##CLASS(NAME, ARGUMENTS, CLASS::TapType() );
00045
00046 #define ALCAP_TAP_GENERATOR( CLASS , ... ) \
00047 ALCAP_TAP_GENERATOR__( #CLASS, CLASS##APGenerator, #__VA_ARGS__)
00048
00049
00050 #endif // TAPGENERATORFACTORY__HH_