Rivet  1.8.0
AnalysisBuilder.hh
1 // -*- C++ -*-
2 #ifndef RIVET_AnalysisBuilder_HH
3 #define RIVET_AnalysisBuilder_HH
4 
5 #include "Rivet/Rivet.hh"
6 #include "Rivet/Analysis.fhh"
7 #include "Rivet/AnalysisLoader.hh"
8 #include "Rivet/Tools/Logging.fhh"
9 
10 namespace Rivet {
11 
12 
14 
16  class AnalysisBuilderBase {
17  public:
18  AnalysisBuilderBase() { }
19  virtual ~AnalysisBuilderBase() { }
20 
21  virtual Analysis* mkAnalysis() const = 0;
22 
23  const string name() const {
24  Analysis* a = mkAnalysis();
25  string rtn = a->name();
26  delete a;
27  return rtn;
28  }
29 
30  protected:
31  void _register() {
32  AnalysisLoader::_registerBuilder(this);
33  }
34  };
35 
36 
38  template <typename T>
39  class AnalysisBuilder : public AnalysisBuilderBase {
40  public:
41  AnalysisBuilder() {
42  _register();
43  }
44 
45  Analysis* mkAnalysis() const {
46  return new T();
47  }
48  };
49 
51 
52 }
53 
54 #endif