μHAL (v2.7.9)
Part of the IPbus software repository
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"
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>
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