otsdaq  v1_01_04
 All Classes Namespaces Functions
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 class DataProducer : public DataProcessor, public virtual WorkLoop
13 {
14 public:
15  DataProducer(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID, unsigned int bufferSize=100);
16  virtual ~DataProducer(void);
17 
18  void registerToBuffer (void);
19  virtual void startProcessingData(std::string runNumber);
20  virtual void stopProcessingData (void);
21 
22  template<class D, class H>
23  int attachToEmptySubBuffer(D*& data, H*& header)
24  {
25  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).attachToEmptySubBuffer(data, header);
26  }
27 
28  template<class D, class H>
29  int setWrittenSubBuffer(void)
30  {
31  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).setWrittenSubBuffer();
32  }
33 
34  template<class D, class H>
35  int write(const D& buffer)
36  {
37  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer);
38  }
39 
40  template<class D, class H>
41  int write(const D& buffer, const H& header)
42  {
43  return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer, header);
44  }
45 
46  unsigned int getBufferSize(void){return bufferSize_;}
47 private:
48  unsigned int bufferSize_;
49 
50 };
51 
52 }
53 
54 #endif