Skip to content

Commit

Permalink
COMMON: Use DisposablePtr/DisposableArray in our stream classes
Browse files Browse the repository at this point in the history
  • Loading branch information
DrMcCoy committed Oct 29, 2016
1 parent 086f54e commit 5490a67
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 34 deletions.
9 changes: 3 additions & 6 deletions src/common/memreadstream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,11 @@
namespace Common {

MemoryReadStream::MemoryReadStream(const byte *dataPtr, size_t dataSize, bool disposeMemory) :
_ptrOrig(dataPtr), _ptr(dataPtr), _disposeMemory(disposeMemory),
_size(dataSize), _pos(0), _eos(false) {
_ptrOrig(dataPtr, disposeMemory), _ptr(dataPtr), _size(dataSize), _pos(0), _eos(false) {

}

MemoryReadStream::~MemoryReadStream() {
if (_disposeMemory)
delete[] _ptrOrig;
}

size_t MemoryReadStream::read(void *dataPtr, size_t dataSize) {
Expand Down Expand Up @@ -92,7 +89,7 @@ size_t MemoryReadStream::seek(ptrdiff_t offset, Origin whence) {
throw Exception(kSeekError);

_pos = newPos;
_ptr = _ptrOrig + newPos;
_ptr = _ptrOrig.get() + newPos;

// Reset end-of-stream flag on a successful seek
_eos = false;
Expand All @@ -113,7 +110,7 @@ size_t MemoryReadStream::size() const {
}

const byte *MemoryReadStream::getData() const {
return _ptrOrig;
return _ptrOrig.get();
}


Expand Down
5 changes: 2 additions & 3 deletions src/common/memreadstream.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
#include <boost/noncopyable.hpp>

#include "src/common/types.h"
#include "src/common/disposableptr.h"
#include "src/common/readstream.h"

namespace Common {
Expand Down Expand Up @@ -83,11 +84,9 @@ class MemoryReadStream : boost::noncopyable, public SeekableReadStream {
const byte *getData() const;

private:
const byte * const _ptrOrig;
DisposableArray<const byte> _ptrOrig;
const byte *_ptr;

bool _disposeMemory;

const size_t _size;

size_t _pos;
Expand Down
28 changes: 13 additions & 15 deletions src/common/memwritestream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,33 +86,28 @@ size_t MemoryWriteStream::size() const {


MemoryWriteStreamDynamic::MemoryWriteStreamDynamic(bool disposeMemory, size_t capacity) :
_data(0), _disposeMemory(disposeMemory), _ptr(0), _pos(0), _capacity(0), _size(0) {
_data(0, disposeMemory), _ptr(0), _pos(0), _capacity(0), _size(0) {

reserve(capacity);
}

MemoryWriteStreamDynamic::~MemoryWriteStreamDynamic() {
if (_disposeMemory)
delete[] _data;
}

void MemoryWriteStreamDynamic::reserve(size_t s) {
if (s <= _capacity)
return;

byte *oldData = _data;

while (_capacity < s)
_capacity = MAX<size_t>(2, _capacity * 2);

_data = new byte[_capacity];
_ptr = _data + _pos;
byte *newData = new byte[_capacity];
if (_data)
memcpy(newData, _data.get(), _size);

if (oldData) {
// Copy old data
std::memcpy(_data, oldData, _size);
delete[] oldData;
}
_data.dispose();
_data.reset(newData);
_ptr = _data.get() + _pos;
}

void MemoryWriteStreamDynamic::ensureCapacity(size_t newLen) {
Expand Down Expand Up @@ -140,10 +135,13 @@ size_t MemoryWriteStreamDynamic::write(const void *dataPtr, size_t dataSize) {
return dataSize;
}

void MemoryWriteStreamDynamic::setDisposable(bool disposeMemory) {
_data.setDisposable(disposeMemory);
}

void MemoryWriteStreamDynamic::dispose() {
delete[] _data;
_data.dispose();

_data = 0;
_ptr = 0;
_pos = 0;
_size = 0;
Expand All @@ -159,7 +157,7 @@ size_t MemoryWriteStreamDynamic::size() const {
}

byte *MemoryWriteStreamDynamic::getData() {
return _data;
return _data.get();
}

} // End of namespace Common
6 changes: 3 additions & 3 deletions src/common/memwritestream.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
#include <boost/noncopyable.hpp>

#include "src/common/types.h"
#include "src/common/disposableptr.h"
#include "src/common/writestream.h"

namespace Common {
Expand Down Expand Up @@ -89,6 +90,7 @@ class MemoryWriteStreamDynamic : boost::noncopyable, public WriteStream {

size_t write(const void *dataPtr, size_t dataSize);

void setDisposable(bool disposeMemory);
void dispose();

size_t pos() const;
Expand All @@ -97,9 +99,7 @@ class MemoryWriteStreamDynamic : boost::noncopyable, public WriteStream {
byte *getData();

private:
byte *_data;

bool _disposeMemory;
DisposableArray<byte> _data;

byte *_ptr;
size_t _pos;
Expand Down
5 changes: 1 addition & 4 deletions src/common/readstream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,15 +97,12 @@ size_t SeekableReadStream::evalSeek(ptrdiff_t offset, Origin whence, size_t pos,


SubReadStream::SubReadStream(ReadStream *parentStream, size_t end, bool disposeParentStream) :
_parentStream(parentStream), _disposeParentStream(disposeParentStream),
_pos(0), _end(end), _eos(false) {
_parentStream(parentStream, disposeParentStream), _pos(0), _end(end), _eos(false) {

assert(parentStream);
}

SubReadStream::~SubReadStream() {
if (_disposeParentStream)
delete _parentStream;
}

bool SubReadStream::eos() const {
Expand Down
5 changes: 2 additions & 3 deletions src/common/readstream.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@

#include "src/common/types.h"
#include "src/common/endianness.h"
#include "src/common/disposableptr.h"
#include "src/common/util.h"
#include "src/common/error.h"

Expand Down Expand Up @@ -339,9 +340,7 @@ class SubReadStream : virtual public ReadStream {
size_t read(void *dataPtr, size_t dataSize);

protected:
ReadStream *_parentStream;

bool _disposeParentStream;
DisposablePtr<ReadStream> _parentStream;

size_t _pos;
size_t _end;
Expand Down

0 comments on commit 5490a67

Please sign in to comment.