Rivet
1.8.0
|
00001 // -*- C++ -*- 00002 #ifndef RIVET_AnalysisBuilder_HH 00003 #define RIVET_AnalysisBuilder_HH 00004 00005 #include "Rivet/Rivet.hh" 00006 #include "Rivet/Analysis.fhh" 00007 #include "Rivet/AnalysisLoader.hh" 00008 #include "Rivet/Tools/Logging.fhh" 00009 00010 namespace Rivet { 00011 00012 00014 00016 class AnalysisBuilderBase { 00017 public: 00018 AnalysisBuilderBase() { } 00019 virtual ~AnalysisBuilderBase() { } 00020 00021 virtual Analysis* mkAnalysis() const = 0; 00022 00023 const string name() const { 00024 Analysis* a = mkAnalysis(); 00025 string rtn = a->name(); 00026 delete a; 00027 return rtn; 00028 } 00029 00030 protected: 00031 void _register() { 00032 AnalysisLoader::_registerBuilder(this); 00033 } 00034 }; 00035 00036 00038 template <typename T> 00039 class AnalysisBuilder : public AnalysisBuilderBase { 00040 public: 00041 AnalysisBuilder() { 00042 _register(); 00043 } 00044 00045 Analysis* mkAnalysis() const { 00046 return new T(); 00047 } 00048 }; 00049 00051 00052 } 00053 00054 #endif