1 #ifndef _ots_CircularBuffer_h_
2 #define _ots_CircularBuffer_h_
4 #include "otsdaq-core/DataManager/CircularBufferBase.h"
5 #include "otsdaq-core/DataManager/BufferImplementation.h"
7 #include "otsdaq-core/MessageFacility/MessageFacility.h"
8 #include "otsdaq-core/Macros/CoutHeaderMacros.h"
17 template <
class D,
class H>
25 void resetConsumerList (
void);
27 unsigned int getNumberOfBuffers(
void);
29 inline int read (D& buffer,
const std::string& consumerID)
32 return read(buffer, dummyHeader, consumerID);
35 inline int read (D& buffer, H& header,
const std::string& consumerID)
37 setNextProducerBuffer(consumerID);
38 unsigned int readCounter = theBuffer_.size()-1;
40 if(megaCounter_%10000000 == 0)
41 std::cout << __COUT_HDR_FL__ << __COUT_HDR_FL__
42 <<
"Consumer: " << consumerID
43 <<
" Reading producer: " << lastReadBuffer_[consumerID]->first
44 <<
" Buffer empty? " << lastReadBuffer_[consumerID]->second.isEmpty()
45 <<
" written buffers: " << lastReadBuffer_[consumerID]->second.numberOfWrittenBuffers()
48 while((readReturnVal = lastReadBuffer_[consumerID]->second.read(buffer, header, consumerID)) < 0 && readCounter > 0)
50 setNextProducerBuffer(consumerID);
56 int read(D*& buffer, H*& header,
const std::string& consumerID)
58 setNextProducerBuffer(consumerID);
59 unsigned int readCounter = theBuffer_.size()-1;
61 if(megaCounter_%10000000 == 0)
62 std::cout << __COUT_HDR_FL__ << __COUT_HDR_FL__
63 <<
"Consumer: " << consumerID
64 <<
" Reading producer: " << lastReadBuffer_[consumerID]->first
65 <<
" Buffer empty? " << lastReadBuffer_[consumerID]->second.isEmpty()
66 <<
" written buffers: " << lastReadBuffer_[consumerID]->second.numberOfWrittenBuffers()
69 while((readReturnVal = lastReadBuffer_[consumerID]->second.read(buffer, header, consumerID)) < 0 && readCounter > 0)
71 setNextProducerBuffer(consumerID);
81 std::map<std::string, BufferImplementation<D,H>> theBuffer_;
83 void registerProducer (std::string producerID,
unsigned int numberOfSubBuffers=100);
84 void registerConsumer (std::string consumerID, CircularBufferBase::ConsumerPriority priority);
85 void unregisterConsumer (std::string consumerID);
86 void setNextProducerBuffer(
const std::string& consumer);
88 std::map<std::string, typename std::map<std::string, BufferImplementation<D,H>>::iterator> lastReadBuffer_;
90 unsigned long long megaCounter_;
92 #include "otsdaq-core/DataManager/CircularBuffer.icc"