00001 #ifndef _ots_DataProducer_h_
00002 #define _ots_DataProducer_h_
00003
00004 #include "otsdaq-core/WorkLoopManager/WorkLoop.h"
00005 #include "otsdaq-core/DataManager/DataProcessor.h"
00006 #include "otsdaq-core/DataManager/CircularBuffer.h"
00007 #include <string>
00008
00009 namespace ots
00010 {
00011
00012
00013
00014
00015 class DataProducer : public DataProcessor, public virtual WorkLoop
00016 {
00017 public:
00018 DataProducer(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID, unsigned int bufferSize=100);
00019 virtual ~DataProducer(void);
00020
00021 void registerToBuffer (void);
00022 virtual void startProcessingData(std::string runNumber);
00023 virtual void stopProcessingData (void);
00024
00025 template<class D, class H>
00026 int attachToEmptySubBuffer(D*& data, H*& header)
00027 {
00028 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).attachToEmptySubBuffer(data, header);
00029 }
00030
00031 template<class D, class H>
00032 int setWrittenSubBuffer(void)
00033 {
00034 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).setWrittenSubBuffer();
00035 }
00036
00037 template<class D, class H>
00038 int write(const D& buffer)
00039 {
00040 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer);
00041 }
00042
00043 template<class D, class H>
00044 int write(const D& buffer, const H& header)
00045 {
00046 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer, header);
00047 }
00048
00049 unsigned int getBufferSize(void){return bufferSize_;}
00050 private:
00051 unsigned int bufferSize_;
00052
00053 };
00054
00055 }
00056
00057 #endif