Belle II Software  release-05-02-19
VariadicUnionVarSet.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Oliver Frost *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #pragma once
11 
12 #include <tracking/trackFindingCDC/varsets/BaseVarSet.h>
13 #include <tracking/trackFindingCDC/varsets/UnionVarSet.h>
14 
15 #include <tracking/trackFindingCDC/utilities/EvalVariadic.h>
16 #include <tracking/trackFindingCDC/utilities/Named.h>
17 #include <tracking/trackFindingCDC/utilities/MakeUnique.h>
18 #include <tracking/trackFindingCDC/utilities/MayBePtr.h>
19 
20 #include <vector>
21 #include <string>
22 #include <cassert>
23 
24 namespace Belle2 {
29  namespace TrackFindingCDC {
30 
38  template <class... AVarSets>
39  class VariadicUnionVarSet : public BaseVarSet<typename FirstType<AVarSets...>::Object> {
40 
41  private:
43  using Super = BaseVarSet<typename FirstType<AVarSets...>::Object>;
44 
45  public:
47  using Object = typename Super::Object;
48 
49  private:
52 
53  public:
56  {
57  EvalVariadic{(m_multiVarSet.push_back(makeUnique<AVarSets>()), std::ignore)...};
58  assert(m_multiVarSet.size() == sizeof...(AVarSets));
59  }
60 
61  public:
62  using Super::extract;
63 
65  void initialize() final {
68  }
69 
74  bool extract(const Object* obj) final {
75  return m_multiVarSet.extract(obj);
76  }
77 
78  // Importing name from the base class.
80 
85  std::vector<Named<Float_t*>> getNamedVariables(const std::string& prefix) override
86  {
87  return m_multiVarSet.getNamedVariables(prefix);
88  }
89 
94  MayBePtr<Float_t> find(const std::string& varName) override
95  {
96  return m_multiVarSet.find(varName);
97  }
98 
99  private:
101  UnionVarSet<Object> m_multiVarSet;
102  };
103  }
105 }
Belle2::TrackFindingCDC::VariadicUnionVarSet::find
MayBePtr< Float_t > find(const std::string &varName) override
Pointer to the variable with the given name.
Definition: VariadicUnionVarSet.h:102
Belle2::TrackFindingCDC::UnionVarSet::getNamedVariables
std::vector< Named< Float_t * > > getNamedVariables(const std::string &prefix) override
Getter for the named references to the individual variables Base implementaton returns empty vector.
Definition: UnionVarSet.h:81
Belle2::TrackFindingCDC::VariadicUnionVarSet::m_multiVarSet
UnionVarSet< Object > m_multiVarSet
Container for the multiple variable sets.
Definition: VariadicUnionVarSet.h:109
Belle2::TrackFindingCDC::VariadicUnionVarSet::initialize
void initialize() final
Initialize all contained variable set before event processing.
Definition: VariadicUnionVarSet.h:73
Belle2::TrackFindingCDC::BaseVarSet::extract
virtual bool extract(const Object *obj __attribute__((unused)))
Main method that extracts the variable values from the complex object.
Definition: BaseVarSet.h:58
Belle2::TrackFindingCDC::UnionVarSet::push_back
void push_back(std::unique_ptr< ContainedVarSet > varSet)
Add a variable set to the contained variable sets.
Definition: UnionVarSet.h:105
Belle2::TrackFindingCDC::UnionVarSet::size
size_t size() const
Return the number of currently contained variable sets.
Definition: UnionVarSet.h:119
Belle2::TrackFindingCDC::CompositeProcessingSignalListener::addProcessingSignalListener
void addProcessingSignalListener(ProcessingSignalListener *psl)
Register a processing signal listener to be notified.
Definition: CompositeProcessingSignalListener.cc:57
Belle2::TrackFindingCDC::CompositeProcessingSignalListener::initialize
void initialize() override
Receive and dispatch signal before the start of the event processing.
Definition: CompositeProcessingSignalListener.cc:17
Belle2::TrackFindingCDC::VariadicUnionVarSet::extract
bool extract(const Object *obj) final
Main method that extracts the variable values from the complex object.
Definition: VariadicUnionVarSet.h:82
Belle2::TrackFindingCDC::BaseVarSet::getNamedVariables
std::vector< Named< Float_t * > > getNamedVariables()
Getter for the named references to the individual variables.
Definition: BaseVarSet.h:80
Belle2::TrackFindingCDC::VariadicUnionVarSet::Object
typename Super::Object Object
Object type from which variables shall be extracted.
Definition: VariadicUnionVarSet.h:55
Belle2::TrackFindingCDC::EvalVariadic
Structure to serve as a placeholder for a variadic initializer list of statements to be evaluated.
Definition: EvalVariadic.h:47
Belle2::TrackFindingCDC::UnionVarSet::extract
bool extract(const Object *obj) final
Main method that extracts the variable values from the complex object.
Definition: UnionVarSet.h:68
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::UnionVarSet::find
MayBePtr< Float_t > find(const std::string &varName) override
Pointer to the variable with the given name.
Definition: UnionVarSet.h:95
Belle2::TrackFindingCDC::BaseVarSet< Object >
Belle2::TrackFindingCDC::VariadicUnionVarSet::VariadicUnionVarSet
VariadicUnionVarSet()
Create the union variable set.
Definition: VariadicUnionVarSet.h:63
Belle2::TrackFindingCDC::BaseVarSet::Object
AObject Object
Object type from which variables shall be extracted.
Definition: BaseVarSet.h:47
Belle2::TrackFindingCDC::VariadicUnionVarSet::Super
BaseVarSet< typename FirstType< AVarSets... >::Object > Super
Type of the super class.
Definition: VariadicUnionVarSet.h:51