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 class DataConsumer : public DataProcessor, public virtual WorkLoop
00012 {
00013 public:
00014 enum ConsumerPriority
00015 {
00016 LowConsumerPriority,
00017 HighConsumerPriority
00018 };
00019 DataConsumer(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID, ConsumerPriority priority);
00020 virtual ~DataConsumer(void);
00021
00022 void registerToBuffer (void);
00023 virtual void startProcessingData(std::string runNumber);
00024 virtual void stopProcessingData (void);
00025
00026
00027 template<class D, class H>
00028 int read(D& buffer, H& header)
00029 {
00030 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->read(buffer, header, processorUID_);
00031 }
00032
00033
00034 template<class D, class H>
00035 int read(D*& buffer, H*& header)
00036 {
00037 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->read(buffer, header, processorUID_);
00038 }
00039
00040 template<class D, class H>
00041 int setReadSubBuffer(void)
00042 {
00043 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->getLastReadBuffer(DataProcessor::processorUID_).setReadSubBuffer(DataProcessor::processorUID_);
00044 }
00045
00046 template<class D, class H>
00047 int read(D& buffer)
00048 {
00049 return static_cast<CircularBuffer<D,H>* >(theCircularBuffer_)->read(buffer, processorUID_);
00050 }
00051
00052 ConsumerPriority getPriority(void);
00053
00054 private:
00055 ConsumerPriority priority_;
00056 };
00057
00058 }
00059
00060 #endif