μHAL (v2.6.5)
Part of the IPbus software repository
ClientFactory.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 namespace uhal
35 {
36 
37  template <class T>
38  void ClientFactory::add ( const std::string& aProtocol , const std::string& aDescription )
39  {
40  boost::unordered_map<std::string , boost::shared_ptr<CreatorInterface> >::const_iterator lIt = mCreators.find ( aProtocol ) ;
41 
42  if ( lIt != mCreators.end() )
43  {
44  //
45  //ProtocolAlreadyExist().throwFrom( ThisLocation() );
46  log ( Warning() , "Protocol \"" , aProtocol , "\" already exists in map of creators. Continuing for now, but be warned." );
47  return;
48  }
49 
51  mProductDescriptions.insert ( std::make_pair ( aProtocol , aDescription ) );
52  }
53 
54 
55  template <class T>
57  {
58  return boost::shared_ptr<ClientInterface> ( new T ( aId , aUri ) );
59  }
60 
61 
62 }
boost::shared_ptr< ClientInterface > create(const std::string &aId, const URI &aUri)
Concrete function which creates a new IPbus client based on the protocol identifier specified...
std::map< std::string, std::string > mProductDescriptions
Store the description of the factory product.
WarningLevel Warning
Definition: LogLevels.cpp:79
void add(const std::string &aProtocol, const std::string &aDescription="")
Method to create an associate between a protocol identifier and a Creator of a particular type...
Templated concrete implementation with a CreatorInterface interface.
boost::unordered_map< std::string, boost::shared_ptr< CreatorInterface > > mCreators
Hash map associating a creator for a particular protocol with a file name.
Struct to store a URI when parsed by boost spirit.
Definition: URI.hpp:49