diff --git a/implementations/compressing/compressors/RunLengthEncoding.cpp b/implementations/compressing/compressors/RunLengthEncoding.cpp index ea190bfb..24e0501e 100644 --- a/implementations/compressing/compressors/RunLengthEncoding.cpp +++ b/implementations/compressing/compressors/RunLengthEncoding.cpp @@ -91,7 +91,8 @@ namespace blockstore { } Data RunLengthEncoding::Decompress(const void *data, size_t size) { - istringstream stream = _parseData((uint8_t*)data, size); + istringstream stream; + _parseData((uint8_t*)data, size, &stream); ostringstream decompressed; while(_hasData(&stream)) { _decodeArbitraryWords(&stream, &decompressed); @@ -108,11 +109,8 @@ namespace blockstore { return !str->eof(); } - istringstream RunLengthEncoding::_parseData(const uint8_t *data, size_t size) { - string str((const char*)data, size); - istringstream result; - result.str(str); - return result; + void RunLengthEncoding::_parseData(const uint8_t *data, size_t size, istringstream *result) { + result->str(string((const char*)data, size)); } void RunLengthEncoding::_decodeArbitraryWords(istringstream *stream, ostringstream *decompressed) { diff --git a/implementations/compressing/compressors/RunLengthEncoding.h b/implementations/compressing/compressors/RunLengthEncoding.h index fbc88ed5..29a2c739 100644 --- a/implementations/compressing/compressors/RunLengthEncoding.h +++ b/implementations/compressing/compressors/RunLengthEncoding.h @@ -19,7 +19,7 @@ namespace blockstore { static uint16_t _countIdenticalBytes(uint8_t *start, uint8_t *end); static bool _hasData(std::istringstream *stream); static cpputils::Data _extractData(std::ostringstream *stream); - static std::istringstream _parseData(const uint8_t *data, size_t size); + static void _parseData(const uint8_t *data, size_t size, std::istringstream *result); static void _decodeArbitraryWords(std::istringstream *stream, std::ostringstream *decompressed); static void _decodeIdenticalWords(std::istringstream *stream, std::ostringstream *decompressed); };