Attempt at fixing build errors for simgear/io/iostreams/zlibstream.cxx
Apparently (on Jenkins), std::unordered_map doesn't like enums as keys. Too bad, this made the code more compact...
This commit is contained in:
@@ -547,20 +547,33 @@ void ZlibCompressorIStreambuf::zStreamInit(int compressionLevel,
|
|||||||
ZLibCompressionFormat format,
|
ZLibCompressionFormat format,
|
||||||
ZLibMemoryStrategy memStrategy)
|
ZLibMemoryStrategy memStrategy)
|
||||||
{
|
{
|
||||||
// Intentionally not listing ZLIB_COMPRESSION_FORMAT_AUTODETECT here
|
int windowBits, memLevel;
|
||||||
std::unordered_map<ZLibCompressionFormat, int> compressionFormatMap = {
|
|
||||||
{ZLIB_COMPRESSION_FORMAT_ZLIB, 15},
|
|
||||||
{ZLIB_COMPRESSION_FORMAT_GZIP, 31}
|
|
||||||
};
|
|
||||||
std::unordered_map<ZLibMemoryStrategy, int> memoryStrategyMap = {
|
|
||||||
{ZLIB_FAVOR_MEMORY_OVER_SPEED, 8},
|
|
||||||
{ZLIB_FAVOR_SPEED_OVER_MEMORY, 9}
|
|
||||||
};
|
|
||||||
|
|
||||||
// ZLIB_COMPRESSION_FORMAT_AUTODETECT is only for decompression!
|
// Intentionally not listing ZLIB_COMPRESSION_FORMAT_AUTODETECT here (it is
|
||||||
assert(format != ZLIB_COMPRESSION_FORMAT_AUTODETECT);
|
// only for decompression!)
|
||||||
int windowBits = compressionFormatMap.at(format);
|
switch (format) {
|
||||||
int memLevel = memoryStrategyMap.at(memStrategy);
|
case ZLIB_COMPRESSION_FORMAT_ZLIB:
|
||||||
|
windowBits = 15;
|
||||||
|
break;
|
||||||
|
case ZLIB_COMPRESSION_FORMAT_GZIP:
|
||||||
|
windowBits = 31;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw std::logic_error("Unexpected compression format: " +
|
||||||
|
std::to_string(format));
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (memStrategy) {
|
||||||
|
case ZLIB_FAVOR_MEMORY_OVER_SPEED:
|
||||||
|
memLevel = 8;
|
||||||
|
break;
|
||||||
|
case ZLIB_FAVOR_SPEED_OVER_MEMORY:
|
||||||
|
memLevel = 9;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw std::logic_error("Unexpected memory strategy: " +
|
||||||
|
std::to_string(memStrategy));
|
||||||
|
}
|
||||||
|
|
||||||
_zstream.zalloc = Z_NULL; // No custom memory allocation routines
|
_zstream.zalloc = Z_NULL; // No custom memory allocation routines
|
||||||
_zstream.zfree = Z_NULL; // Ditto. Therefore, the 'opaque' field won't
|
_zstream.zfree = Z_NULL; // Ditto. Therefore, the 'opaque' field won't
|
||||||
@@ -620,13 +633,22 @@ ZlibDecompressorIStreambuf::operationType() const
|
|||||||
|
|
||||||
void ZlibDecompressorIStreambuf::zStreamInit(ZLibCompressionFormat format)
|
void ZlibDecompressorIStreambuf::zStreamInit(ZLibCompressionFormat format)
|
||||||
{
|
{
|
||||||
std::unordered_map<ZLibCompressionFormat, int> compressionFormatMap = {
|
int windowBits;
|
||||||
{ZLIB_COMPRESSION_FORMAT_ZLIB, 15},
|
|
||||||
{ZLIB_COMPRESSION_FORMAT_GZIP, 31},
|
|
||||||
{ZLIB_COMPRESSION_FORMAT_AUTODETECT, 47} // 47 = 32 + 15
|
|
||||||
};
|
|
||||||
|
|
||||||
int windowBits = compressionFormatMap.at(format);
|
switch (format) {
|
||||||
|
case ZLIB_COMPRESSION_FORMAT_ZLIB:
|
||||||
|
windowBits = 15;
|
||||||
|
break;
|
||||||
|
case ZLIB_COMPRESSION_FORMAT_GZIP:
|
||||||
|
windowBits = 31;
|
||||||
|
break;
|
||||||
|
case ZLIB_COMPRESSION_FORMAT_AUTODETECT:
|
||||||
|
windowBits = 47; // 47 = 32 + 15
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw std::logic_error("Unexpected compression format: " +
|
||||||
|
std::to_string(format));
|
||||||
|
}
|
||||||
|
|
||||||
_zstream.zalloc = Z_NULL; // No custom memory allocation routines
|
_zstream.zalloc = Z_NULL; // No custom memory allocation routines
|
||||||
_zstream.zfree = Z_NULL; // Ditto. Therefore, the 'opaque' field won't
|
_zstream.zfree = Z_NULL; // Ditto. Therefore, the 'opaque' field won't
|
||||||
|
|||||||
Reference in New Issue
Block a user