1 #ifndef _ots_BufferImplementation_h_
2 #define _ots_BufferImplementation_h_
4 #include "otsdaq/DataManager/CircularBufferBase.h"
5 #include "otsdaq/Macros/CoutMacros.h"
6 #include "otsdaq/Macros/StringMacros.h"
7 #include "otsdaq/MessageFacility/MessageFacility.h"
17 template<
class D,
class H>
25 , subBuffersStatus_(
nullptr)
31 std::atomic_bool* subBuffersStatus_;
36 unsigned int numberOfSubBuffers = 100);
43 void resetConsumerList(
void);
44 void registerConsumer(
const std::string& name,
47 int attachToEmptySubBuffer(D*& data, H*& header);
48 int setWrittenSubBuffer(
void);
49 int write(
const D& buffer,
const H& header = H());
50 int read(D& buffer,
const std::string& consumer);
51 int read(D& buffer, H& header,
const std::string& consumer);
52 int read(D*& buffer, H*& header,
const std::string& consumer);
58 bool isEmpty(
void)
const;
59 unsigned int bufferSize(
void)
const {
return numberOfSubBuffers_; }
60 unsigned int numberOfWrittenBuffers(
void)
const;
62 const std::map<std::string, ConsumerStruct>& getConsumers(
void)
const
67 void dumpStatus(std::ostream* out = (std::ostream*)&(std::cout))
const;
70 const std::string mfSubject_;
76 ErrorBufferLocked = -2,
77 ErrorBufferNotAvailable = -3,
78 ErrorReadBufferOutOfSync = -4
81 const std::string producerName_;
82 unsigned int numberOfSubBuffers_;
83 std::map<std::string, ConsumerStruct>
86 std::atomic_bool* subBuffersStatus_;
87 std::vector<H> headers_;
88 std::vector<D> subBuffers_;
89 const bool bufferFree_;
91 unsigned int nextWritePointer(
void);
92 unsigned int nextReadPointer(
const std::string& consumer);
93 int getFreeBufferIndex(
void);
94 unsigned int getReadPointer(
const std::string& consumer);
95 void setWritten(
unsigned int subBuffer);
96 void setFree(
unsigned int subBuffer,
const std::string& consumer);
97 std::atomic_bool& isFree(
unsigned int subBuffer)
const;
98 std::atomic_bool& isFree(
unsigned int subBuffer,
const std::string& consumer)
const;
100 H& getHeader(
unsigned int subBuffer);
101 D& getSubBuffer(
unsigned int subBuffer);
102 void writeSubBuffer(
unsigned int subBuffer,
const D& buffer,
const H& header);
104 #include "otsdaq/DataManager/BufferImplementation.icc"
int setReadSubBuffer(const std::string &consumer)