SDD PreProcessor updated (F. Prino)
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTModuleAgent.h
CommitLineData
242bb794 1// @(#) $Id$
2
3#ifndef ALIHLTMODULEAGENT_H
4#define ALIHLTMODULEAGENT_H
5/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * See cxx source for full Copyright notice */
7
8/** @file AliHLTModuleAgent.h
9 @author Matthias Richter
10 @date
11 @brief Agent helper class for component libraries.
12 @note The class is used in Offline (AliRoot) context
13*/
14
15#include <TObject.h>
16#include <TList.h>
17#include "AliHLTLogging.h"
18#include "AliHLTConfiguration.h"
19#include "AliHLTConfigurationHandler.h"
20
21class AliRunLoader;
22
23/**
24 * @class AliHLTModuleAgent
25 * @brief Agent helper class for HLT sub modules, e.g. PHOS, TPC, Trigger
26 *
27 * This class describes
28 *
29 * There must be only one agent per module/library.
30 *
31 * @ingroup alihlt_system
32 */
33class AliHLTModuleAgent : public TObject, public AliHLTLogging {
34 public:
35 /**
36 * standard constructor. The agent is automatically registered in the
37 * global agent manager
38 */
39 AliHLTModuleAgent();
40 /** not a valid copy constructor, defined according to effective C++ style */
41 AliHLTModuleAgent(const AliHLTModuleAgent&);
42 /** not a valid assignment op, but defined according to effective C++ style */
43 AliHLTModuleAgent& operator=(const AliHLTModuleAgent&);
44 /** destructor */
45 virtual ~AliHLTModuleAgent();
46
47 /**
48 * Print status info.
49 * Short summary on registered agents. This function acts globally on the list
50 * of agents if no specific agent is specified.
51 */
52 static void PrintStatus(const char* agent=NULL);
53
54 /**
55 * Get the first agent in the list
56 * @return pointer to first agent in the list, NULL if empty
57 */
58 static AliHLTModuleAgent* GetFirstAgent();
59
60 /**
61 * Get the next agent in the list
62 * @return pointer to next agent in the list, NULL if end of list
63 */
64 static AliHLTModuleAgent* GetNextAgent();
65
66 /**
67 * Register all configurations belonging to this module with the
68 * AliHLTConfigurationHandler. The agent can adapt the configurations
69 * to be registered to the current AliRoot setup by checking the
70 * runloader.
96bda103 71 * @param handler [in] the configuration handler
72 * @param runloader [in] AliRoot runloader
242bb794 73 * @return neg. error code if failed
74 */
75 virtual int CreateConfigurations(AliHLTConfigurationHandler* handler,
76 AliRunLoader* runloader=NULL) const;
77
78 /**
79 * Get the top configurations belonging to this module.
80 * A top configuration describes a processing chain. It can simply be
81 * described by the last configuration(s) in the chain.
82 * The agent can adapt the configurations to be registered to the current
83 * AliRoot setup by checking the runloader.
96bda103 84 * @param runloader [in] AliRoot runloader
242bb794 85 * @return string containing the top configurations separated by blanks
86 */
87 virtual const char* GetTopConfigurations(AliRunLoader* runloader=NULL) const;
88
89 /**
90 * Component libraries which the configurations of this agent depend on.
91 * @return list of component libraries as a blank-separated string.
92 */
93 virtual const char* GetRequiredComponentLibraries() const;
94
95 /**
96 * Register componets.
97 * This method can be used to register components for the module instead
98 * of the 'static object approach'. Registration is don by passing a
99 * sample object to @ref AliHLTComponentHandler::RegisterComponent<br>
100 * \em Note: The sample object is owned by the agent, make sure to delete
101 * it.
102 */
103 virtual int RegisterComponents(AliRunLoader* runloader=NULL) const;
104
105 protected:
106
107 private:
108 /**
109 * Register agent in the global list.
110 * @return neg. error code if failed
111 */
112 static int Register(AliHLTModuleAgent* pAgent);
113
114 /**
115 * Unregister agent in the global list.
116 * @return neg. error code if failed
117 */
118 static int Unregister(AliHLTModuleAgent* pAgent);
119
120 /** the list of active agents */
121 static TList fgAgentList;
122
123 /** the current object link (list position) */
124 static TObjLink* fgCurrentLnk;
125
126 ClassDef(AliHLTModuleAgent, 0);
127};
128
129#endif