00001 #ifndef _ots_DataConsumer_h_
00002 #define _ots_DataConsumer_h_
00003
00004 #include "otsdaq-core/DataManager/DataProcessor.h"
00005 #include <string>
00006 #include <map>
00007
00008 namespace ots
00009 {
00010
00011
00012
00013
00014 class DataConsumer : public DataProcessor, public virtual WorkLoop
00015 {
00016 public:
00017 enum ConsumerPriority
00018 {
00019 LowConsumerPriority,
00020 HighConsumerPriority
00021 };
00022 DataConsumer(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID, ConsumerPriority priority);
00023 virtual ~DataConsumer(void);
00024
00025 void registerToBuffer (void);
00026 virtual void startProcessingData(std::string runNumber);
00027 virtual void stopProcessingData (void);
00028
00029
00030 template<class D, class H>
00031 int read(D& buffer, H& header)
00032 {
00033 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->read(buffer, header, processorUID_);
00034 }
00035
00036
00037 template<class D, class H>
00038 int read(D*& buffer, H*& header)
00039 {
00040 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->read(buffer, header, processorUID_);
00041 }
00042
00043 template<class D, class H>
00044 int setReadSubBuffer(void)
00045 {
00046 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getLastReadBuffer(DataProcessor::processorUID_).setReadSubBuffer(DataProcessor::processorUID_);
00047 }
00048
00049 template<class D, class H>
00050 int read(D& buffer)
00051 {
00052 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->read(buffer, processorUID_);
00053 }
00054
00055 ConsumerPriority getPriority(void);
00056
00057 private:
00058 ConsumerPriority priority_;
00059 };
00060
00061 }
00062
00063 #endif