Belle II Software  release-05-01-25
BufferedWriter.cc
1 #include "daq/slc/system/BufferedWriter.h"
2 
3 #include <daq/slc/base/IOException.h>
4 
5 #include <cstring>
6 
7 using namespace Belle2;
8 
9 BufferedWriter::BufferedWriter()
10  : m_memory(NULL), m_size(0), m_pos(0), m_allocated(false) {}
11 
12 BufferedWriter::BufferedWriter(size_t size, unsigned char* memory)
13  : m_memory(memory), m_size(size), m_pos(0), m_allocated(false)
14 {
15  if (memory == NULL) {
16  m_memory = new unsigned char[size];
17  m_allocated = true;
18  }
19 }
20 
21 BufferedWriter::BufferedWriter(const BufferedWriter& writer)
22  : m_memory(NULL), m_size(writer.m_size),
23  m_pos(writer.m_pos), m_allocated(writer.m_allocated)
24 {
25  if (m_allocated) {
26  m_memory = new unsigned char [writer.m_size];
27  ::memcpy(m_memory, writer.m_memory, writer.m_size);
28  } else {
29  m_memory = writer.m_memory;
30  }
31  m_size = writer.m_size;
32  m_pos = writer.m_pos;
33 }
34 
35 BufferedWriter::~BufferedWriter()
36 {
37  if (m_allocated && m_memory != NULL) delete [] m_memory;
38 }
39 
40 const BufferedWriter& BufferedWriter::operator=(const BufferedWriter& writer)
41 {
42  if (m_allocated) {
43  delete [] m_memory;
44  }
45  m_allocated = writer.m_allocated;
46  if (m_allocated) {
47  m_memory = new unsigned char [writer.m_size];
48  ::memcpy(m_memory, writer.m_memory, writer.m_size);
49  } else {
50  m_memory = writer.m_memory;
51  }
52  m_size = writer.m_size;
53  m_pos = writer.m_pos;
54  return *this;
55 }
56 
57 size_t BufferedWriter::write(const void* buf, const size_t count)
58 {
59  if (m_pos + count > m_size) {
60  throw (IOException("out of buffer range: %d+%d>%d",
61  (int)m_pos, (int)count, (int)m_size));
62  }
63  memcpy((m_memory + m_pos), buf, count);
64  m_pos += count;
65  return count;
66 }
67 
Belle2::IOException
Definition: IOException.h:12
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::BufferedWriter
Definition: BufferedWriter.h:12