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