Belle II Software  release-05-01-25
EvtGenModelRegister.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010-2011 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Martin Ritter *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <list>
14 #include <vector>
15 
16 class EvtDecayBase;
17 
18 namespace Belle2 {
26  public:
28  typedef EvtDecayBase* ModelFactory();
29 
31  template<class MODEL> class Factory {
32  public:
35  {
37  }
39  static EvtDecayBase* factory()
40  {
41  return new MODEL();
42  }
43  };
44 
46  static void registerModel(ModelFactory* factory)
47  {
48  getInstance().m_models.push_back(factory);
49  }
50 
54  static std::list<EvtDecayBase*> getModels();
55 
56  private:
57 
60 
62  EvtGenModelRegister(const EvtGenModelRegister& other) = delete;
65 
71 
73  std::vector<ModelFactory*> m_models;
74  };
75 
77 #define B2_EVTGEN_REGISTER_MODEL(classname) namespace {\
78  Belle2::EvtGenModelRegister::Factory<classname> EvtGenModelFactory_##classname; \
79  }
80 
82 } //Belle2 namespace
Belle2::EvtGenModelRegister::Factory
Helper Class to easily register new EvtDecayBases for Belle2.
Definition: EvtGenModelRegister.h:31
Belle2::EvtGenModelRegister::getModels
static std::list< EvtDecayBase * > getModels()
Return a list of models.
Definition: EvtGenModelRegister.cc:29
Belle2::EvtGenModelRegister
Class to keep a register of all Belle2 EvtDecayBases.
Definition: EvtGenModelRegister.h:25
Belle2::EvtGenModelRegister::ModelFactory
EvtDecayBase * ModelFactory()
Callback type to return a new model instance.
Definition: EvtGenModelRegister.h:28
Belle2::EvtGenModelRegister::m_models
std::vector< ModelFactory * > m_models
List of all registered EvtGenModels.
Definition: EvtGenModelRegister.h:73
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::EvtGenModelRegister::Factory::Factory
Factory()
Constructor to register a model with a given name.
Definition: EvtGenModelRegister.h:34
Belle2::EvtGenModelRegister::operator=
EvtGenModelRegister & operator=(const EvtGenModelRegister &)=delete
Singleton: private assignment operator.
Belle2::EvtGenModelRegister::registerModel
static void registerModel(ModelFactory *factory)
Register a new Model, called by the EvtGenModelRegister::Factory class.
Definition: EvtGenModelRegister.h:46
Belle2::EvtGenModelRegister::EvtGenModelRegister
EvtGenModelRegister()
Singleton: private constructor.
Definition: EvtGenModelRegister.h:59
Belle2::EvtGenModelRegister::getInstance
static EvtGenModelRegister & getInstance()
Return reference to the instance.
Definition: EvtGenModelRegister.cc:23
Belle2::EvtGenModelRegister::Factory::factory
static EvtDecayBase * factory()
Create a new instance of the EvtDecayBase and return the pointer.
Definition: EvtGenModelRegister.h:39