EPICS ARCHIVER V4
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups
MemoryBuffer.h
1 // -*- c++ -*-
2 #ifndef __MEMORYBUFFER_H__
3 #define __MEMORYBUFFER_H__
4 
5 // tools
6 #include "tools/GenericException.h"
7 #include "tools/NoCopy.h"
8 
16 template <class T>
18 {
19 public:
20 
22  MemoryBuffer() : memory(0), size(0) {}
23 
25  MemoryBuffer(size_t wanted) : memory(0), size(0)
26  {
27  reserve(wanted);
28  }
29 
32  {
33  if (memory)
34  free(memory);
35  }
36 
40  void reserve(size_t wanted)
41  {
42  if (size < wanted)
43  {
44  if (memory)
45  free(memory);
46  memory = (char *)calloc(wanted, 1);
47  if (!memory)
48  throw GenericException(__FILE__, __LINE__,
49  "MemoryBuffer::reserve(%zu) failed",
50  wanted);
51  size = wanted;
52  }
53  }
54 
56  const T *mem() const
57  { return (const T *)memory; }
58 
60  T *mem()
61  { return (T *) memory; }
62 
64  size_t capacity() const
65  { return size; }
66 
67 private:
68  PROHIBIT_DEFAULT_COPY(MemoryBuffer);
69  char *memory;
70  size_t size;
71 };
72 
73 #endif //__MEMORYBUFFER_H__
~MemoryBuffer()
Destructor.
Definition: MemoryBuffer.h:31
size_t capacity() const
Get current size.
Definition: MemoryBuffer.h:64
A memory region that can be resized.
Definition: MemoryBuffer.h:17
void reserve(size_t wanted)
Reserve or grow buffer.
Definition: MemoryBuffer.h:40
const T * mem() const
Access as (T *)
Definition: MemoryBuffer.h:56
MemoryBuffer(size_t wanted)
Constructor.
Definition: MemoryBuffer.h:25
T * mem()
Access as (T *)
Definition: MemoryBuffer.h:60
Generic Exception: Base class for exceptions.
Definition: GenericException.h:45
MemoryBuffer()
Constructor: Buffer is initially empty.
Definition: MemoryBuffer.h:22