μHAL (v2.8.17)
Part of the IPbus software repository
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
37#include "uhal/log/log.hpp"
38
39
40namespace uhal
41{
42
43 template <class T>
44 void DerivedNodeFactory::add ( const std::string& aNodeClassName )
45 {
46 std::unordered_map<std::string , std::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] = std::shared_ptr<CreatorInterface> ( new Creator<T>() );
55 }
56
57
58 template <class T>
60 {
61 log ( Debug() , "Creator called for Node of type " , Quote ( Type < T >() ) );
62 return new T ( aNode );
63 }
64
65}
Templated concrete implementation with a CreatorInterface interface.
Node * create(const Node &aNode)
Concrete function which creates a new IPbus client based on the protocol identifier specified.
std::unordered_map< std::string, std::shared_ptr< CreatorInterface > > mCreators
Hash map associating a creator for a particular node type with a string identifier for that node type...
void add(const std::string &aNodeClassName)
Method to create an associate between a node type identifier and a Creator of that particular node ty...
A heirarchical node for navigating heirarchical firmwares.
Definition: Node.hpp:85
DebugLevel Debug
Definition: LogLevels.cpp:133
_Quote< T > Quote(const T &aT)
void log(FatalLevel &aFatal, const T0 &aArg0)
Function to add a log entry at Fatal level.
Definition: log.hxx:18
WarningLevel Warning
Definition: LogLevels.cpp:79