Skip to content

Commit 60c435b

Browse files
committed
[FEATURE] In ByteBuffer: added reference counter
1 parent 9684d8f commit 60c435b

2 files changed

Lines changed: 21 additions & 3 deletions

File tree

parser/ByteBuffer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
ByteBuffer::ByteBuffer(bufsize_t v_size, bufsize_t v_padding)
55
: content(nullptr), contentSize(0), padding(v_padding),
6-
originalSize(0)
6+
originalSize(0), m_refs(0)
77
{
88
if (v_size == 0) throw BufferException("Zero size requested");
99

@@ -14,7 +14,7 @@ ByteBuffer::ByteBuffer(bufsize_t v_size, bufsize_t v_padding)
1414

1515
ByteBuffer::ByteBuffer(BYTE *v_content, bufsize_t v_size, bufsize_t v_padding)
1616
: content(nullptr), contentSize(0), padding(v_padding),
17-
originalSize(0)
17+
originalSize(0), m_refs(0)
1818
{
1919
if (v_size == 0) throw BufferException("Zero size requested");
2020

@@ -28,7 +28,7 @@ ByteBuffer::ByteBuffer(BYTE *v_content, bufsize_t v_size, bufsize_t v_padding)
2828

2929
ByteBuffer::ByteBuffer(AbstractByteBuffer *v_parent, offset_t v_offset, bufsize_t v_size, bufsize_t v_padding)
3030
: content(NULL), contentSize(0), padding(0),
31-
originalSize(0)
31+
originalSize(0), m_refs(0)
3232
{
3333
if (!v_parent) throw BufferException("Cannot make subBuffer for NULL buffer!");
3434
if (!v_size) throw BufferException("Cannot make 0 size buffer!");

parser/include/bearparser/ByteBuffer.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ class ByteBuffer : public AbstractByteBuffer
1010
ByteBuffer(BYTE *v_content, bufsize_t v_size, bufsize_t padding = DEFAULT_PADDING);
1111
ByteBuffer(AbstractByteBuffer *sourceBuf, offset_t offset, bufsize_t size, bufsize_t padding = DEFAULT_PADDING);
1212

13+
static bool release(ByteBuffer* buf)
14+
{
15+
if (!buf) return false;
16+
if (buf->m_refs == 0) {
17+
delete buf;
18+
return true;
19+
}
20+
buf->m_refs--;
21+
return false;
22+
}
23+
24+
void addRef()
25+
{
26+
m_refs++;
27+
}
28+
1329
virtual ~ByteBuffer();
1430

1531
virtual bufsize_t getContentSize() { return contentSize; }
@@ -26,5 +42,7 @@ class ByteBuffer : public AbstractByteBuffer
2642
bufsize_t padding;
2743

2844
bufsize_t originalSize;
45+
46+
size_t m_refs;
2947
};
3048

0 commit comments

Comments
 (0)