Fix RunLengthEncoding for older compilers

This commit is contained in:
Sebastian Messmer 2015-12-14 18:14:03 +01:00
parent b8a017b09c
commit 64b8862652
2 changed files with 5 additions and 7 deletions

View File

@ -91,7 +91,8 @@ namespace blockstore {
} }
Data RunLengthEncoding::Decompress(const void *data, size_t size) { 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; ostringstream decompressed;
while(_hasData(&stream)) { while(_hasData(&stream)) {
_decodeArbitraryWords(&stream, &decompressed); _decodeArbitraryWords(&stream, &decompressed);
@ -108,11 +109,8 @@ namespace blockstore {
return !str->eof(); return !str->eof();
} }
istringstream RunLengthEncoding::_parseData(const uint8_t *data, size_t size) { void RunLengthEncoding::_parseData(const uint8_t *data, size_t size, istringstream *result) {
string str((const char*)data, size); result->str(string((const char*)data, size));
istringstream result;
result.str(str);
return result;
} }
void RunLengthEncoding::_decodeArbitraryWords(istringstream *stream, ostringstream *decompressed) { void RunLengthEncoding::_decodeArbitraryWords(istringstream *stream, ostringstream *decompressed) {

View File

@ -19,7 +19,7 @@ namespace blockstore {
static uint16_t _countIdenticalBytes(uint8_t *start, uint8_t *end); static uint16_t _countIdenticalBytes(uint8_t *start, uint8_t *end);
static bool _hasData(std::istringstream *stream); static bool _hasData(std::istringstream *stream);
static cpputils::Data _extractData(std::ostringstream *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 _decodeArbitraryWords(std::istringstream *stream, std::ostringstream *decompressed);
static void _decodeIdenticalWords(std::istringstream *stream, std::ostringstream *decompressed); static void _decodeIdenticalWords(std::istringstream *stream, std::ostringstream *decompressed);
}; };