ROOT logo

//-*- Mode: C++ -*-
// $Id$

#ifndef ALIHLTHOMERLIBMANAGER_H
#define ALIHLTHOMERLIBMANAGER_H
/* This file is property of and copyright by the ALICE HLT Project        * 
 * ALICE Experiment at CERN, All rights reserved.                         *
 * See cxx source for full Copyright notice                               */

/// @file   AliHLTHOMERLibManager.h
/// @author Matthias Richter
/// @date   
/// @brief  dynamic HLT HOMER reader/writer generation and destruction

#include "AliHLTDataTypes.h"
#include "TObject.h" // for ClassDef/Imp

class AliHLTHOMERReader;
class AliHLTHOMERWriter;

/**
 * @class AliHLTHOMERLibManager
 * Dynamic manager of HOMER library.
 * The class allows to generate objects of HOMER readers and writers
 * dynamically and loads also the HOMER lib. In order to write HOMER library
 * independent code it is important to use the AliHLTMonitoringWriter/
 * AliHLTMonitoringReader classes when ever class methods are used. Those
 * classes just define a virtual interface. <br>
 *
 * Instead of creating a reader or writer by \em new and deleting it with
 * \em delete, one has to use the Open and Delete methods of this class.
 *
 * <pre>
 * AliHLTHOMERLibManager manager;
 *
 * // open a HOMER reader listening at port 23000 of the localhost
 * AliHLTMonitoringReader* pReader=manager.OpenReader(localhost, 23000);
 *
 * // read next event, timeout 5s
 * while (pReader && pReader->ReadNextEvent(5000000)==0) {
 *   unsigned long count=pReader->GetBlockCnt();
 *   gSystem->Sleep(5);
 *   ...
 * }
 *
 * // delete reader
 * manager.DeleteReader(pReader);
 * </pre>
 *
 * The manager does not provide methods to create a HOMER reader on
 * basis of shared memory. This is most likely a depricated functionality,
 * although kept for the sake of completeness. However, at some point it
 * might become useful. Please notify the developers if you need that
 * functionality.
 *
 * @ingroup alihlt_homer
 */
class AliHLTHOMERLibManager {
 public:
  /** standard constructor */
  AliHLTHOMERLibManager();
  /** destructor */
  virtual ~AliHLTHOMERLibManager();

  /**
   * Open a homer reader working on a TCP port.
   */
  AliHLTHOMERReader* OpenReader(const char* hostname, unsigned short port );
  
  /**
   * Open a homer reader working on multiple TCP ports.
   */
  AliHLTHOMERReader* OpenReader(unsigned int tcpCnt, const char** hostnames, unsigned short* ports);
	
  /**
   * Open a HOMER reader for reading from a System V shared memory segment.
  AliHLTHOMERReader* OpenReader(key_t shmKey, int shmSize );
   */
	
  /**
   * Open a HOMER reader for reading from multiple System V shared memory segments
  AliHLTHOMERReader* OpenReader(unsigned int shmCnt, key_t* shmKey, int* shmSize );
   */
	
  /**
   * Open a HOMER reader for reading from multiple TCP ports and multiple System V shared memory segments
  AliHLTHOMERReader* OpenReader(unsigned int tcpCnt, const char** hostnames, unsigned short* ports, 
				    unsigned int shmCnt, key_t* shmKey, int* shmSize );
   */

  /**
   * Open a HOMER reader.
   * Load HOMER library dynamically and create object working on the provided
   * buffer.
   */
  AliHLTHOMERReader* OpenReaderBuffer(const AliHLTUInt8_t* pBuffer, int size);

  /**
   * Delete a HOMER reader.
   * Clean-up of the object is done inside the HOMER library.
   */
  int DeleteReader(AliHLTHOMERReader* pReader);

  /**
   * Open a HOMER writer.
   * Load HOMER library dynamically and create object working on the provided
   * buffer.
   */
  AliHLTHOMERWriter* OpenWriter();

  /**
   * Delete a HOMER writer.
   * Clean-up of the object is done inside the HOMER library.
   */
  int DeleteWriter(AliHLTHOMERWriter* pWriter);

 protected:

 private:
  /** copy constructor prohibited */
  AliHLTHOMERLibManager(const AliHLTHOMERLibManager&);
  /** assignment operator prohibited */
  AliHLTHOMERLibManager& operator=(const AliHLTHOMERLibManager&);

  /**
   * Load the HOMER library.
   */
  int LoadHOMERLibrary();

  /**
   * Unloads the HOMER library.
   */
  int UnloadHOMERLibrary();

  /** status of the loading of the HOMER library */
static  int fgLibraryStatus; //!transient

  /** entry in the HOMER library */
  void (*fFctCreateReaderFromTCPPort)(); //!transient

  /** entry in the HOMER library */
  void (*fFctCreateReaderFromTCPPorts)(); //!transient

  /** entry in the HOMER library */
  void (*fFctCreateReaderFromBuffer)(); //!transient

  /** entry in the HOMER library */
  void (*fFctDeleteReader)(); //!transient

  /** entry in the HOMER library */
  void (*fFctCreateWriter)(); //!transient

  /** entry in the HOMER library */
  void (*fFctDeleteWriter)(); //!transient

  /** Indicates the library that was actually (and if) loaded in LoadHOMERLibrary(). */
  const char* fLoadedLib;  //!transient

  static const char* fgkLibraries[]; /// List of libraries to try and load.
  static int fgkLibRefCount[]; /// The library reference count to control when to unload the library.

  ClassDef(AliHLTHOMERLibManager, 0)
};
#endif
 AliHLTHOMERLibManager.h:1
 AliHLTHOMERLibManager.h:2
 AliHLTHOMERLibManager.h:3
 AliHLTHOMERLibManager.h:4
 AliHLTHOMERLibManager.h:5
 AliHLTHOMERLibManager.h:6
 AliHLTHOMERLibManager.h:7
 AliHLTHOMERLibManager.h:8
 AliHLTHOMERLibManager.h:9
 AliHLTHOMERLibManager.h:10
 AliHLTHOMERLibManager.h:11
 AliHLTHOMERLibManager.h:12
 AliHLTHOMERLibManager.h:13
 AliHLTHOMERLibManager.h:14
 AliHLTHOMERLibManager.h:15
 AliHLTHOMERLibManager.h:16
 AliHLTHOMERLibManager.h:17
 AliHLTHOMERLibManager.h:18
 AliHLTHOMERLibManager.h:19
 AliHLTHOMERLibManager.h:20
 AliHLTHOMERLibManager.h:21
 AliHLTHOMERLibManager.h:22
 AliHLTHOMERLibManager.h:23
 AliHLTHOMERLibManager.h:24
 AliHLTHOMERLibManager.h:25
 AliHLTHOMERLibManager.h:26
 AliHLTHOMERLibManager.h:27
 AliHLTHOMERLibManager.h:28
 AliHLTHOMERLibManager.h:29
 AliHLTHOMERLibManager.h:30
 AliHLTHOMERLibManager.h:31
 AliHLTHOMERLibManager.h:32
 AliHLTHOMERLibManager.h:33
 AliHLTHOMERLibManager.h:34
 AliHLTHOMERLibManager.h:35
 AliHLTHOMERLibManager.h:36
 AliHLTHOMERLibManager.h:37
 AliHLTHOMERLibManager.h:38
 AliHLTHOMERLibManager.h:39
 AliHLTHOMERLibManager.h:40
 AliHLTHOMERLibManager.h:41
 AliHLTHOMERLibManager.h:42
 AliHLTHOMERLibManager.h:43
 AliHLTHOMERLibManager.h:44
 AliHLTHOMERLibManager.h:45
 AliHLTHOMERLibManager.h:46
 AliHLTHOMERLibManager.h:47
 AliHLTHOMERLibManager.h:48
 AliHLTHOMERLibManager.h:49
 AliHLTHOMERLibManager.h:50
 AliHLTHOMERLibManager.h:51
 AliHLTHOMERLibManager.h:52
 AliHLTHOMERLibManager.h:53
 AliHLTHOMERLibManager.h:54
 AliHLTHOMERLibManager.h:55
 AliHLTHOMERLibManager.h:56
 AliHLTHOMERLibManager.h:57
 AliHLTHOMERLibManager.h:58
 AliHLTHOMERLibManager.h:59
 AliHLTHOMERLibManager.h:60
 AliHLTHOMERLibManager.h:61
 AliHLTHOMERLibManager.h:62
 AliHLTHOMERLibManager.h:63
 AliHLTHOMERLibManager.h:64
 AliHLTHOMERLibManager.h:65
 AliHLTHOMERLibManager.h:66
 AliHLTHOMERLibManager.h:67
 AliHLTHOMERLibManager.h:68
 AliHLTHOMERLibManager.h:69
 AliHLTHOMERLibManager.h:70
 AliHLTHOMERLibManager.h:71
 AliHLTHOMERLibManager.h:72
 AliHLTHOMERLibManager.h:73
 AliHLTHOMERLibManager.h:74
 AliHLTHOMERLibManager.h:75
 AliHLTHOMERLibManager.h:76
 AliHLTHOMERLibManager.h:77
 AliHLTHOMERLibManager.h:78
 AliHLTHOMERLibManager.h:79
 AliHLTHOMERLibManager.h:80
 AliHLTHOMERLibManager.h:81
 AliHLTHOMERLibManager.h:82
 AliHLTHOMERLibManager.h:83
 AliHLTHOMERLibManager.h:84
 AliHLTHOMERLibManager.h:85
 AliHLTHOMERLibManager.h:86
 AliHLTHOMERLibManager.h:87
 AliHLTHOMERLibManager.h:88
 AliHLTHOMERLibManager.h:89
 AliHLTHOMERLibManager.h:90
 AliHLTHOMERLibManager.h:91
 AliHLTHOMERLibManager.h:92
 AliHLTHOMERLibManager.h:93
 AliHLTHOMERLibManager.h:94
 AliHLTHOMERLibManager.h:95
 AliHLTHOMERLibManager.h:96
 AliHLTHOMERLibManager.h:97
 AliHLTHOMERLibManager.h:98
 AliHLTHOMERLibManager.h:99
 AliHLTHOMERLibManager.h:100
 AliHLTHOMERLibManager.h:101
 AliHLTHOMERLibManager.h:102
 AliHLTHOMERLibManager.h:103
 AliHLTHOMERLibManager.h:104
 AliHLTHOMERLibManager.h:105
 AliHLTHOMERLibManager.h:106
 AliHLTHOMERLibManager.h:107
 AliHLTHOMERLibManager.h:108
 AliHLTHOMERLibManager.h:109
 AliHLTHOMERLibManager.h:110
 AliHLTHOMERLibManager.h:111
 AliHLTHOMERLibManager.h:112
 AliHLTHOMERLibManager.h:113
 AliHLTHOMERLibManager.h:114
 AliHLTHOMERLibManager.h:115
 AliHLTHOMERLibManager.h:116
 AliHLTHOMERLibManager.h:117
 AliHLTHOMERLibManager.h:118
 AliHLTHOMERLibManager.h:119
 AliHLTHOMERLibManager.h:120
 AliHLTHOMERLibManager.h:121
 AliHLTHOMERLibManager.h:122
 AliHLTHOMERLibManager.h:123
 AliHLTHOMERLibManager.h:124
 AliHLTHOMERLibManager.h:125
 AliHLTHOMERLibManager.h:126
 AliHLTHOMERLibManager.h:127
 AliHLTHOMERLibManager.h:128
 AliHLTHOMERLibManager.h:129
 AliHLTHOMERLibManager.h:130
 AliHLTHOMERLibManager.h:131
 AliHLTHOMERLibManager.h:132
 AliHLTHOMERLibManager.h:133
 AliHLTHOMERLibManager.h:134
 AliHLTHOMERLibManager.h:135
 AliHLTHOMERLibManager.h:136
 AliHLTHOMERLibManager.h:137
 AliHLTHOMERLibManager.h:138
 AliHLTHOMERLibManager.h:139
 AliHLTHOMERLibManager.h:140
 AliHLTHOMERLibManager.h:141
 AliHLTHOMERLibManager.h:142
 AliHLTHOMERLibManager.h:143
 AliHLTHOMERLibManager.h:144
 AliHLTHOMERLibManager.h:145
 AliHLTHOMERLibManager.h:146
 AliHLTHOMERLibManager.h:147
 AliHLTHOMERLibManager.h:148
 AliHLTHOMERLibManager.h:149
 AliHLTHOMERLibManager.h:150
 AliHLTHOMERLibManager.h:151
 AliHLTHOMERLibManager.h:152
 AliHLTHOMERLibManager.h:153
 AliHLTHOMERLibManager.h:154
 AliHLTHOMERLibManager.h:155
 AliHLTHOMERLibManager.h:156
 AliHLTHOMERLibManager.h:157
 AliHLTHOMERLibManager.h:158
 AliHLTHOMERLibManager.h:159
 AliHLTHOMERLibManager.h:160
 AliHLTHOMERLibManager.h:161
 AliHLTHOMERLibManager.h:162
 AliHLTHOMERLibManager.h:163
 AliHLTHOMERLibManager.h:164
 AliHLTHOMERLibManager.h:165