DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
include
triggeralgs
AbstractFactory.hxx
Go to the documentation of this file.
1
/* @file: AbstractFactory.hxx
2
*
3
* This is part of the DUNE DAQ Application Framework, copyright 2023.
4
* Licensing/copyright details are in the COPYING file that you should have
5
* received with this code.
6
*/
7
8
#ifndef TRIGGERALGS_ABSTRACT_FACTORY_HXX_
9
#define TRIGGERALGS_ABSTRACT_FACTORY_HXX_
10
11
#include "
triggeralgs/Issues.hpp
"
12
13
namespace
triggeralgs
{
14
15
template
<
typename
T>
16
std::shared_ptr<AbstractFactory<T>>
AbstractFactory<T>::s_single_factory
=
nullptr
;
17
18
template
<
typename
T>
19
typename
AbstractFactory<T>::creation_map
&
AbstractFactory<T>::get_makers
(){
20
static
creation_map
s_makers;
21
return
s_makers;
22
}
23
24
template
<
typename
T>
25
void
AbstractFactory<T>::register_creator
(
const
std::string alg_name,
maker_creator
creator)
26
{
27
creation_map
& makers =
get_makers
();
28
auto
it = makers.find(alg_name);
29
30
if
(it == makers.end()) {
31
makers[alg_name] = creator;
32
return
;
33
}
34
throw
FactoryOverwrite(
ERS_HERE
, alg_name);
35
return
;
36
}
37
38
template
<
typename
T>
39
std::unique_ptr<T>
AbstractFactory<T>::build_maker
(
const
std::string& alg_name)
40
{
41
creation_map
& makers =
get_makers
();
42
auto
it = makers.find(alg_name);
43
44
if
(it != makers.end()) {
45
TLOG
() <<
"[AF] Factory building "
<< alg_name <<
"."
;
46
return
it->second();
47
}
48
49
throw
FactoryNotFound
(
ERS_HERE
, alg_name);
50
return
nullptr
;
51
}
52
53
template
<
typename
T>
54
std::shared_ptr<AbstractFactory<T>>
AbstractFactory<T>::get_instance
()
55
{
56
if
(
s_single_factory
==
nullptr
) {
57
s_single_factory
= std::make_shared<AbstractFactory<T>>();
58
}
59
return
s_single_factory
;
60
}
61
62
}
// namespace triggeralgs
63
64
#endif
// TRIGGERALGS_ABSTRACT_FACTORY_HXX_
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
triggeralgs::AbstractFactory::get_makers
static creation_map & get_makers()
Definition
AbstractFactory.hxx:19
triggeralgs::AbstractFactory::get_instance
static std::shared_ptr< AbstractFactory< T > > get_instance()
Definition
AbstractFactory.hxx:54
triggeralgs::AbstractFactory::s_single_factory
static std::shared_ptr< AbstractFactory< T > > s_single_factory
Definition
AbstractFactory.hpp:39
triggeralgs::AbstractFactory::creation_map
std::unordered_map< std::string, maker_creator > creation_map
Definition
AbstractFactory.hpp:24
triggeralgs::AbstractFactory::register_creator
static void register_creator(const std::string alg_name, maker_creator creator)
Definition
AbstractFactory.hxx:25
triggeralgs::AbstractFactory::build_maker
std::unique_ptr< T > build_maker(const std::string &alg_name)
Definition
AbstractFactory.hxx:39
triggeralgs::AbstractFactory::maker_creator
std::function< std::unique_ptr< T >()> maker_creator
Definition
AbstractFactory.hpp:23
TLOG
#define TLOG(...)
Definition
macro.hpp:22
triggeralgs
Definition
AbstractFactory.hpp:18
Issues.hpp
FactoryNotFound
FactoryNotFound
Definition
Issues.hpp:23
Generated on
for DUNE-DAQ by
1.17.0