otsdaq  v2_01_00
DataProducer.h
1 #ifndef _ots_DataProducer_h_
2 #define _ots_DataProducer_h_
3 
4 #include "otsdaq-core/WorkLoopManager/WorkLoop.h"
5 #include "otsdaq-core/DataManager/DataProcessor.h"
6 #include "otsdaq-core/DataManager/CircularBuffer.h"
7 #include <string>
8 
9 namespace ots
10 {
11 
12 //DataProducer
13 // This class provides base class functionality for Data Producer plugin classes to
14 // receive incoming streaming data and places it in a Buffer.
15 class DataProducer : public DataProcessor, public virtual WorkLoop
16 {
17 public:
18  DataProducer(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID, unsigned int bufferSize=100);
19  virtual ~DataProducer(void);
20 
21  void registerToBuffer (void);
22  virtual void startProcessingData(std::string runNumber);
23  virtual void stopProcessingData (void);
24 
25  template<class D, class H>
26  int attachToEmptySubBuffer(D*& data, H*& header)
27  {
28  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).attachToEmptySubBuffer(data, header);
29  }
30 
31  template<class D, class H>
32  int setWrittenSubBuffer(void)
33  {
34  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).setWrittenSubBuffer();
35  }
36 
37  template<class D, class H>
38  int write(const D& buffer)
39  {
40  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer);
41  }
42 
43  template<class D, class H>
44  int write(const D& buffer, const H& header)
45  {
46  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer, header);
47  }
48 
49  unsigned int getBufferSize(void){return bufferSize_;}
50 private:
51  unsigned int bufferSize_;
52 
53 };
54 
55 }
56 
57 #endif