CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
edm::shared_memory::WriteBuffer Class Reference

#include <WriteBuffer.h>

Public Member Functions

void copyToBuffer (const char *iStart, std::size_t iLength)
 
const WriteBufferoperator= (const WriteBuffer &)=delete
 
const WriteBufferoperator= (WriteBuffer &&)=delete
 
 WriteBuffer (std::string const &iUniqueName, BufferInfo *iBufferInfo)
 
 WriteBuffer (const WriteBuffer &)=delete
 
 WriteBuffer (WriteBuffer &&)=delete
 
 ~WriteBuffer ()
 

Private Member Functions

void growBuffer (std::size_t iLength)
 

Private Attributes

char * buffer_
 
BufferInfobufferInfo_
 
std::array< std::string, 2 > bufferNames_
 
std::size_t bufferSize_
 
std::unique_ptr< boost::interprocess::managed_shared_memory > sm_
 

Detailed Description

Definition at line 37 of file WriteBuffer.h.

Constructor & Destructor Documentation

edm::shared_memory::WriteBuffer::WriteBuffer ( std::string const &  iUniqueName,
BufferInfo iBufferInfo 
)
inline

iUniqueName : must be unique for all processes running on a system. iBufferInfo : is a pointer to a shared_memory address where the same address needs to be shared by ReadBuffer and WriteBuffer.

Definition at line 43 of file WriteBuffer.h.

References buffer_, bufferInfo_, bufferNames_, edm::shared_memory::buffer_names::kBuffer0, edm::shared_memory::buffer_names::kBuffer1, operator=(), and ~WriteBuffer().

44  : bufferSize_{0}, buffer_{nullptr}, bufferInfo_{iBufferInfo} {
45  bufferNames_[0] = iUniqueName + buffer_names::kBuffer0;
46  bufferNames_[1] = iUniqueName + buffer_names::kBuffer1;
47  assert(bufferInfo_);
48  }
constexpr char const *const kBuffer0
Definition: buffer_names.h:30
std::array< std::string, 2 > bufferNames_
Definition: WriteBuffer.h:71
constexpr char const *const kBuffer1
Definition: buffer_names.h:31
edm::shared_memory::WriteBuffer::WriteBuffer ( const WriteBuffer )
delete
edm::shared_memory::WriteBuffer::WriteBuffer ( WriteBuffer &&  )
delete
WriteBuffer::~WriteBuffer ( )

Definition at line 31 of file WriteBuffer.cc.

References bufferInfo_, bufferNames_, edm::shared_memory::BufferInfo::index_, edm::shared_memory::buffer_names::kBuffer, MatrixUtil::remove(), and sm_.

Referenced by WriteBuffer().

31  {
32  if (sm_) {
33  sm_->destroy<char>(buffer_names::kBuffer);
34  sm_.reset();
36  }
37 }
constexpr char const *const kBuffer
Definition: buffer_names.h:29
std::array< std::string, 2 > bufferNames_
Definition: WriteBuffer.h:71
def remove(d, key, TELL=False)
Definition: MatrixUtil.py:212
std::unique_ptr< boost::interprocess::managed_shared_memory > sm_
Definition: WriteBuffer.h:72

Member Function Documentation

void edm::shared_memory::WriteBuffer::copyToBuffer ( const char *  iStart,
std::size_t  iLength 
)
inline

Definition at line 57 of file WriteBuffer.h.

References buffer_, bufferSize_, popcon2dropbox::copy(), and growBuffer().

57  {
58  if (iLength > bufferSize_) {
59  growBuffer(iLength);
60  }
61  std::copy(iStart, iStart + iLength, buffer_);
62  }
def copy(args, dbName)
void growBuffer(std::size_t iLength)
Definition: WriteBuffer.cc:41
void WriteBuffer::growBuffer ( std::size_t  iLength)
private

Definition at line 41 of file WriteBuffer.cc.

References buffer_, bufferInfo_, bufferNames_, bufferSize_, edm::shared_memory::BufferInfo::identifier_, edm::shared_memory::BufferInfo::index_, edm::shared_memory::buffer_names::kBuffer, MatrixUtil::remove(), and sm_.

Referenced by copyToBuffer().

41  {
42  int newBuffer = (bufferInfo_->index_ + 1) % 2;
43  if (sm_) {
44  sm_->destroy<char>(buffer_names::kBuffer);
45  sm_.reset();
47  }
48  sm_ = std::make_unique<boost::interprocess::managed_shared_memory>(
49  boost::interprocess::open_or_create, bufferNames_[newBuffer].c_str(), iLength + 1024);
50  assert(sm_.get());
51  bufferSize_ = iLength;
52  bufferInfo_->index_ = newBuffer;
54  buffer_ = sm_->construct<char>(buffer_names::kBuffer)[iLength](0);
55  assert(buffer_);
56 }
constexpr char const *const kBuffer
Definition: buffer_names.h:29
std::array< std::string, 2 > bufferNames_
Definition: WriteBuffer.h:71
def remove(d, key, TELL=False)
Definition: MatrixUtil.py:212
std::unique_ptr< boost::interprocess::managed_shared_memory > sm_
Definition: WriteBuffer.h:72
const WriteBuffer& edm::shared_memory::WriteBuffer::operator= ( const WriteBuffer )
delete

Referenced by WriteBuffer().

const WriteBuffer& edm::shared_memory::WriteBuffer::operator= ( WriteBuffer &&  )
delete

Member Data Documentation

char* edm::shared_memory::WriteBuffer::buffer_
private

Definition at line 69 of file WriteBuffer.h.

Referenced by copyToBuffer(), growBuffer(), and WriteBuffer().

BufferInfo* edm::shared_memory::WriteBuffer::bufferInfo_
private

Definition at line 70 of file WriteBuffer.h.

Referenced by growBuffer(), WriteBuffer(), and ~WriteBuffer().

std::array<std::string, 2> edm::shared_memory::WriteBuffer::bufferNames_
private

Definition at line 71 of file WriteBuffer.h.

Referenced by growBuffer(), WriteBuffer(), and ~WriteBuffer().

std::size_t edm::shared_memory::WriteBuffer::bufferSize_
private

Definition at line 68 of file WriteBuffer.h.

Referenced by copyToBuffer(), and growBuffer().

std::unique_ptr<boost::interprocess::managed_shared_memory> edm::shared_memory::WriteBuffer::sm_
private

Definition at line 72 of file WriteBuffer.h.

Referenced by growBuffer(), and ~WriteBuffer().