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