Line data Source code
1 : //-*- Mode: C++ -*-
2 : // @(#) $Id: AliRawHLTManager.h 23318 2008-01-14 12:43:28Z hristov $
3 :
4 : #ifndef ALIRAWHLTMANAGER_H
5 : #define ALIRAWHLTMANAGER_H
6 : //* This file is property of and copyright by the ALICE HLT Project *
7 : //* ALICE Experiment at CERN, All rights reserved. *
8 : //* See cxx source for full Copyright notice *
9 :
10 : /** @file AliRawHLTManager.h
11 : @author Matthias Richter
12 : @date
13 : @brief dynamic generation of HLT RAW readers and streams
14 : */
15 :
16 : // see below for class documentation
17 : // or
18 : // refer to README to build package
19 : // or
20 : // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
21 :
22 : class AliRawReader;
23 : #include "TObject.h"
24 :
25 : extern "C" {
26 : typedef AliRawReader* (*AliRawReaderHLTCreateInstance_t)(AliRawReader* pParentReader, const char* options);
27 : }
28 :
29 : /**
30 : * @class AliRawHLTManager
31 : * The class gives dynamic access to creater methods for HLT RAW readers and
32 : * streams without any library dependencies to HLT libraries.
33 : */
34 0 : class AliRawHLTManager {
35 : public:
36 : AliRawHLTManager();
37 : virtual ~AliRawHLTManager();
38 :
39 : /**
40 : * Create an instance of the AliRawReaderHLT.
41 : * The AliRawReaderHLT instance needs the parent RAW reader and a list
42 : * of detectors for which it should access data from the HLT stream.
43 : */
44 : static AliRawReader* CreateRawReaderHLT(AliRawReader* pParent, const char* detectors);
45 :
46 : /**
47 : * Create an instance of a RAW stream.
48 : * There is no common base class for RAW streams due to the different nature of the
49 : * detectors and the data. The least common class is the TObject. The calling code
50 : * should check if the right class has been created by
51 : * <pre>
52 : * TObject pObject=AliRawHLTManager::CreateRawStream("MyClass");
53 : * MyClass* pClass=dynamic_cast<MyClass*>(pObject)
54 : * </pre>
55 : *
56 : * \b NOTE: The function redirects the request to the HLT framework, a handler
57 : * to actually create the RAW stream must be implemented in the corresponding
58 : * component library.
59 : */
60 : static TObject* CreateRawStream(const char* className);
61 : protected:
62 : private:
63 : enum {kUnloaded=0, kLoaded, kUnavailable};
64 :
65 : /**
66 : * Load the HLT interface library
67 : */
68 : static int LoadLibrary();
69 :
70 : /** status of the loading of the HOMER library */
71 : static int fLibraryStatus; //!transient
72 :
73 : /** entry in the HOMER library */
74 : static AliRawReaderHLTCreateInstance_t fFctCreateRawReaderHLT; //!transient
75 :
76 : /** entry in the HOMER library */
77 : static void* fFctCreateRawStream; //!transient
78 :
79 128 : ClassDef(AliRawHLTManager, 0)
80 : };
81 :
82 : // those definitions have been copied one to one from rec/AliRawReaderHLT.h
83 : // to avoid including this header file
84 : #define ALIHLTREC_LIBRARY "libHLTrec.so"
85 : #define ALIHLTREC_LIBRARY_VERSION 0
86 : #define ALIRAWREADERHLT_CREATE_INSTANCE "AliRawReaderHLTCreateInstance"
87 :
88 :
89 : #endif //ALIRAWHLTMANAGER_H
|