μHAL (v2.7.9)
Part of the IPbus software repository
uhal
include
uhal
TemplateDefinitions
DerivedNodeFactory.hxx
Go to the documentation of this file.
1
/*
2
---------------------------------------------------------------------------
3
4
This file is part of uHAL.
5
6
uHAL is a hardware access library and programming framework
7
originally developed for upgrades of the Level-1 trigger of the CMS
8
experiment at CERN.
9
10
uHAL is free software: you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation, either version 3 of the License, or
13
(at your option) any later version.
14
15
uHAL is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
GNU General Public License for more details.
19
20
You should have received a copy of the GNU General Public License
21
along with uHAL. If not, see <http://www.gnu.org/licenses/>.
22
23
24
Andrew Rose, Imperial College, London
25
email: awr01 <AT> imperial.ac.uk
26
27
Marc Magrans de Abril, CERN
28
email: marc.magrans.de.abril <AT> cern.ch
29
30
---------------------------------------------------------------------------
31
*/
32
33
34
#include "
uhal/log/LogLevels.hpp
"
35
#include "
uhal/log/log_inserters.quote.hpp
"
36
#include "
uhal/log/log_inserters.type.hpp
"
37
#include "
uhal/log/log.hpp
"
38
39
40
namespace
uhal
41
{
42
43
template
<
class
T>
44
void
DerivedNodeFactory::add
(
const
std::string& aNodeClassName )
45
{
46
boost::unordered_map<std::string , boost::shared_ptr<CreatorInterface> >::const_iterator lIt =
mCreators
.find ( aNodeClassName ) ;
47
48
if
( lIt !=
mCreators
.end() )
49
{
50
log
(
Warning
() ,
"Derived node \""
, aNodeClassName ,
"\" already exists in map of creators. Continuing for now, but be warned."
);
51
return
;
52
}
53
54
mCreators
[aNodeClassName] =
boost::shared_ptr<CreatorInterface>
(
new
Creator<T>
() );
55
}
56
57
58
template
<
class
T>
59
Node
*
DerivedNodeFactory::Creator<T>::create
(
const
Node
& aNode )
60
{
61
log
(
Debug
() ,
"Creator called for Node of type "
,
Quote
( Type < T >() ) );
62
return
new
T ( aNode );
63
}
64
65
}
uhal::DerivedNodeFactory::add
void add(const std::string &aNodeClassName)
Method to create an associate between a node type identifier and a Creator of that particular node ty...
Definition:
DerivedNodeFactory.hxx:44
boost::shared_ptr
Definition:
DerivedNodeFactory.hpp:52
uhal::DerivedNodeFactory::Creator
Templated concrete implementation with a CreatorInterface interface.
Definition:
DerivedNodeFactory.hpp:133
uhal
Definition:
HttpResponseGrammar.hpp:49
uhal::Node
A heirarchical node for navigating heirarchical firmwares.
Definition:
Node.hpp:86
log_inserters.quote.hpp
uhal::log
void log(FatalLevel &aFatal, const T0 &aArg0)
Function to add a log entry at Fatal level.
Definition:
log.hxx:20
uhal::Warning
WarningLevel Warning
Definition:
LogLevels.cpp:79
uhal::DerivedNodeFactory::Creator::create
Node * create(const Node &aNode)
Concrete function which creates a new IPbus client based on the protocol identifier specified.
Definition:
DerivedNodeFactory.hxx:59
uhal::Quote
_Quote< T > Quote(const T &aT)
Definition:
log_inserters.quote.hxx:49
uhal::Debug
DebugLevel Debug
Definition:
LogLevels.cpp:133
log.hpp
LogLevels.hpp
log_inserters.type.hpp
uhal::DerivedNodeFactory::mCreators
boost::unordered_map< std::string, boost::shared_ptr< CreatorInterface > > mCreators
Hash map associating a creator for a particular node type with a string identifier for that node type...
Definition:
DerivedNodeFactory.hpp:160
Generated on Tue Sep 22 2020 19:18:39 for μHAL (v2.7.9) by
1.8.18