AlgResourcePool.h
Go to the documentation of this file.
1 #ifndef GAUDIHIVE_ALGRESOURCEPOOL_H
2 #define GAUDIHIVE_ALGRESOURCEPOOL_H
3 
4 // Include files
7 #include "GaudiKernel/Service.h"
10 
11 // TODO: include here is only a workaround
12 #include "ExecutionFlowGraph.h"
13 
14 // std includes
15 #include <string>
16 #include <list>
17 #include <vector>
18 #include <bitset>
19 #include <atomic>
20 #include <mutex>
21 
22 // External libs
23 #include "boost/dynamic_bitset.hpp"
24 #include "tbb/concurrent_queue.h"
25 
34 class AlgResourcePool: public extends<Service,
35  IAlgResourcePool> {
36 public:
37  // Standard constructor
39  // Standard destructor
41 
42  virtual StatusCode start();
43  virtual StatusCode initialize();
45  virtual StatusCode acquireAlgorithm(const std::string& name, IAlgorithm*& algo, bool blocking = false);
47  virtual StatusCode releaseAlgorithm(const std::string& name, IAlgorithm*& algo);
49  virtual StatusCode acquireResource(const std::string& name);
51  virtual StatusCode releaseResource(const std::string& name);
52 
55 
56  virtual StatusCode beginRun();
57  virtual StatusCode endRun();
58 
59  virtual StatusCode stop();
60 
62 
63 private:
64  typedef tbb::concurrent_bounded_queue<IAlgorithm*> concurrentQueueIAlgPtr;
66  typedef boost::dynamic_bitset<> state_type;
67 
76 
79 
81  StatusCode flattenSequencer(Algorithm* sequencer, ListAlg& alglist, const std::string& parentName, unsigned int recursionDepth=0);
82 
85 
87  ListAlg m_algList;
88 
90  ListAlg m_topAlgList;
91 
94 
97 
100 
103 };
104 
105 #endif // GAUDIHIVE_ALGRESOURCEPOOL_H
ListAlg m_flatUniqueAlgList
The flat list of algorithms w/o clones.
AlgResourcePool(const std::string &name, ISvcLocator *svc)
virtual StatusCode releaseResource(const std::string &name)
Release a certrain resource.
StringArrayProperty m_topAlgNames
The names of the algorithms to be passed to the algorithm manager.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
virtual std::list< IAlgorithm * > getTopAlgList()
std::map< size_t, concurrentQueueIAlgPtr * > m_algqueue_map
std::mutex m_resource_mutex
std::list< SmartIF< IAlgorithm > > ListAlg
virtual StatusCode initialize()
The AlgResourcePool is a concrete implementation of the IAlgResourcePool interface.
state_type m_available_resources
STL class.
boost::dynamic_bitset state_type
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:319
std::map< size_t, size_t > m_n_of_allowed_instances
tbb::concurrent_bounded_queue< IAlgorithm * > concurrentQueueIAlgPtr
std::list< IAlgorithm * > m_flatUniqueAlgPtrList
The flat list of algorithms w/o clones which is returned.
virtual StatusCode acquireResource(const std::string &name)
Acquire a certain resource.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
concurrency::ExecutionFlowGraph * m_EFGraph
OMG yet another hack.
std::list< IAlgorithm * > m_topAlgPtrList
The top list of algorithms.
virtual concurrency::ExecutionFlowGraph * getExecutionFlowGraph() const
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:25
virtual StatusCode start()
virtual StatusCode endRun()
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:74
StatusCode decodeTopAlgs()
Decode the top alg list.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
virtual std::list< IAlgorithm * > getFlatAlgList()
StatusCode flattenSequencer(Algorithm *sequencer, ListAlg &alglist, const std::string &parentName, unsigned int recursionDepth=0)
Recursively flatten an algList.
std::map< size_t, state_type > m_resource_requirements
virtual StatusCode releaseAlgorithm(const std::string &name, IAlgorithm *&algo)
Release a certain algorithm.
ListAlg m_topAlgList
The list of top algorithms.
virtual StatusCode stop()
std::map< std::string, unsigned int > m_resource_indices
virtual StatusCode beginRun()
std::map< size_t, unsigned int > m_n_of_created_instances
ListAlg m_algList
The list of all algorithms created withing the Pool which are not top.
virtual StatusCode acquireAlgorithm(const std::string &name, IAlgorithm *&algo, bool blocking=false)
Acquire a certain algorithm using its name.