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 class DataProducer : public DataProcessor, public virtual WorkLoop 00013 { 00014 public: 00015 DataProducer(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID, unsigned int bufferSize=100); 00016 virtual ~DataProducer(void); 00017 00018 void registerToBuffer (void); 00019 virtual void startProcessingData(std::string runNumber); 00020 virtual void stopProcessingData (void); 00021 00022 template<class D, class H> 00023 int attachToEmptySubBuffer(D*& data, H*& header) 00024 { 00025 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).attachToEmptySubBuffer(data, header); 00026 } 00027 00028 template<class D, class H> 00029 int setWrittenSubBuffer(void) 00030 { 00031 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).setWrittenSubBuffer(); 00032 } 00033 00034 template<class D, class H> 00035 int write(const D& buffer) 00036 { 00037 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer); 00038 } 00039 00040 template<class D, class H> 00041 int write(const D& buffer, const H& header) 00042 { 00043 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getBuffer(DataProcessor::processorUID_).write(buffer, header); 00044 } 00045 00046 unsigned int getBufferSize(void){return bufferSize_;} 00047 private: 00048 unsigned int bufferSize_; 00049 00050 }; 00051 00052 } 00053 00054 #endif