otsdaq  v2_03_00
DataConsumer.h
1 #ifndef _ots_DataConsumer_h_
2 #define _ots_DataConsumer_h_
3 
4 #include <map>
5 #include <string>
6 #include "otsdaq-core/DataManager/DataProcessor.h"
7 
8 namespace ots
9 {
10 // DataConsumer
11 // This class provides base class functionality for Data Consumer plugin classes to
12 // extracts and process streaming data from a Buffer.
13 class DataConsumer : public DataProcessor, public virtual WorkLoop
14 {
15  public:
16  enum ConsumerPriority
17  {
18  LowConsumerPriority, // If the buffers are full because a low priority consumer
19  // didn't emptied them then overwrite
20  HighConsumerPriority // Can't overwrite but need to wait for sometime before
21  // writing a buffer
22  };
23  DataConsumer(std::string supervisorApplicationUID,
24  std::string bufferUID,
25  std::string processorUID,
26  ConsumerPriority priority);
27  virtual ~DataConsumer(void);
28 
29  virtual void registerToBuffer(void);
30  // virtual void unregisterFromBuffer (void);
31 
32  virtual void startProcessingData(std::string runNumber);
33  virtual void stopProcessingData(void);
34 
35  // Copies the buffer into the passed parameters
36  template<class D, class H>
37  int read(D& buffer, H& header)
38  {
39  return static_cast<CircularBuffer<D, H>*>(theCircularBuffer_)
40  ->read(buffer, header, processorUID_);
41  }
42 
43  // Fast version where you point to the buffer without copying
44  template<class D, class H>
45  int read(D*& buffer, H*& header)
46  {
47  return static_cast<CircularBuffer<D, H>*>(theCircularBuffer_)
48  ->read(buffer, header, processorUID_);
49  }
50 
51  template<class D, class H>
52  int setReadSubBuffer(void)
53  {
54  return static_cast<CircularBuffer<D, H>*>(theCircularBuffer_)
55  ->getLastReadBuffer(DataProcessor::processorUID_)
56  .setReadSubBuffer(DataProcessor::processorUID_);
57  }
58 
59  template<class D, class H>
60  int read(D& buffer)
61  {
62  return static_cast<CircularBuffer<D, H>*>(theCircularBuffer_)
63  ->read(buffer, processorUID_);
64  }
65 
66  ConsumerPriority getPriority(void);
67 
68  private:
69  ConsumerPriority priority_;
70 };
71 
72 } // namespace ots
73 
74 #endif