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