8
8
#include < list>
9
9
#include < utility>
10
10
11
+ // Forward declaration
12
+ class SharedBuffer ;
13
+
11
14
// The DynamicBuffer class holds a malloc() allocated heap buffer.
12
15
// It's similar to std::vector<char>, but permits allocation failures without crashing the system.
13
16
class DynamicBuffer {
@@ -23,6 +26,8 @@ class DynamicBuffer {
23
26
DynamicBuffer (const char * buf, size_t len) : DynamicBuffer(len) { if (_data) memcpy (_data, buf, len); };
24
27
explicit DynamicBuffer (const String& s) : DynamicBuffer(s.begin(), s.length()) {};
25
28
explicit DynamicBuffer (String&&); // Move string contents in to buffer if possible
29
+ DynamicBuffer (const SharedBuffer&);
30
+ DynamicBuffer (SharedBuffer&&);
26
31
~DynamicBuffer () { clear (); };
27
32
28
33
// Move
@@ -48,6 +53,7 @@ class DynamicBuffer {
48
53
// Same interface as DynamicBuffer, but with shared_ptr semantics: buffer is held until last copy releases it.
49
54
class SharedBuffer {
50
55
std::shared_ptr<DynamicBuffer> _buf;
56
+ friend class DynamicBuffer ;
51
57
52
58
public:
53
59
@@ -56,8 +62,8 @@ class SharedBuffer {
56
62
SharedBuffer (const char * buf, size_t len) : _buf(std::make_shared<DynamicBuffer>(buf, len)) {};
57
63
explicit SharedBuffer (const String& s) : _buf(std::make_shared<DynamicBuffer>(s)) {};
58
64
explicit SharedBuffer (String&& s) : _buf(std::make_shared<DynamicBuffer>(std::move(s))) {};
59
- explicit SharedBuffer (const DynamicBuffer &d) : _buf(std::make_shared<DynamicBuffer>(d)) {};
60
- explicit SharedBuffer (DynamicBuffer&& d) : _buf(std::make_shared<DynamicBuffer>(std::move(d))) {};
65
+ SharedBuffer (const DynamicBuffer &d) : _buf(std::make_shared<DynamicBuffer>(d)) {};
66
+ SharedBuffer (DynamicBuffer&& d) : _buf(std::make_shared<DynamicBuffer>(std::move(d))) {};
61
67
62
68
char * data () const { return _buf ? _buf->data () : nullptr ; };
63
69
size_t size () const { return _buf ? _buf->size () : 0U ; };
0 commit comments