diff options
Diffstat (limited to 'source/slang/slang-serialize-types.cpp')
| -rw-r--r-- | source/slang/slang-serialize-types.cpp | 136 |
1 files changed, 12 insertions, 124 deletions
diff --git a/source/slang/slang-serialize-types.cpp b/source/slang/slang-serialize-types.cpp index ea6cd9c34..2e6e56bb4 100644 --- a/source/slang/slang-serialize-types.cpp +++ b/source/slang/slang-serialize-types.cpp @@ -145,7 +145,6 @@ struct ByteReader // !!!!!!!!!!!!!!!!!!!!!!!!!!!! SerialRiffUtil !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! /* static */ Result SerialRiffUtil::writeArrayChunk( - SerialCompressionType compressionType, FourCC chunkId, const void* data, size_t numEntries, @@ -160,52 +159,17 @@ struct ByteReader return SLANG_OK; } - // Make compressed fourCC - chunkId = (compressionType != SerialCompressionType::None) - ? SLANG_MAKE_COMPRESSED_FOUR_CC(chunkId) - : chunkId; - ScopeChunk scope(container, Chunk::Kind::Data, chunkId); - switch (compressionType) - { - case SerialCompressionType::None: - { - SerialBinary::ArrayHeader header; - header.numEntries = uint32_t(numEntries); - - container->write(&header, sizeof(header)); - container->write(data, typeSize * numEntries); - break; - } - case SerialCompressionType::VariableByteLite: - { - List<uint8_t> compressedPayload; - - size_t numCompressedEntries = (numEntries * typeSize) / sizeof(uint32_t); - ByteEncodeUtil::encodeLiteUInt32( - (const uint32_t*)data, - numCompressedEntries, - compressedPayload); - - SerialBinary::CompressedArrayHeader header; - header.numEntries = uint32_t(numEntries); - header.numCompressedEntries = uint32_t(numCompressedEntries); - - container->write(&header, sizeof(header)); - container->write(compressedPayload.getBuffer(), compressedPayload.getCount()); - break; - } - default: - { - return SLANG_FAIL; - } - } + SerialBinary::ArrayHeader header; + header.numEntries = uint32_t(numEntries); + + container->write(&header, sizeof(header)); + container->write(data, typeSize * numEntries); return SLANG_OK; } /* static */ Result SerialRiffUtil::readArrayChunk( - SerialCompressionType compressionType, RiffContainer::DataChunk* dataChunk, ListResizer& listOut) { @@ -214,90 +178,14 @@ struct ByteReader RiffReadHelper read = dataChunk->asReadHelper(); const size_t typeSize = listOut.getTypeSize(); - switch (compressionType) - { - case SerialCompressionType::VariableByteLite: - { - Bin::CompressedArrayHeader header; - SLANG_RETURN_ON_FAIL(read.read(header)); - - void* dst = listOut.setSize(header.numEntries); - SLANG_ASSERT( - header.numCompressedEntries == - uint32_t((header.numEntries * typeSize) / sizeof(uint32_t))); - - // Decode.. - ByteEncodeUtil::decodeLiteUInt32( - read.getData(), - header.numCompressedEntries, - (uint32_t*)dst); - break; - } - case SerialCompressionType::None: - { - // Read uncompressed - Bin::ArrayHeader header; - SLANG_RETURN_ON_FAIL(read.read(header)); - const size_t payloadSize = header.numEntries * typeSize; - SLANG_ASSERT(payloadSize == read.getRemainingSize()); - void* dst = listOut.setSize(header.numEntries); - ::memcpy(dst, read.getData(), payloadSize); - break; - } - } - return SLANG_OK; -} - -// !!!!!!!!!!!!!!!!!!!!!!!!!!!! SerialParseUtil !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -// clang-format off -#define SLANG_SERIAL_BINARY_COMPRESSION_TYPE(x) \ - x(None, none) \ - x(VariableByteLite, lite) -// clang-format on - -/* static */ SlangResult SerialParseUtil::parseCompressionType( - const UnownedStringSlice& text, - SerialCompressionType& outType) -{ - struct Pair - { - UnownedStringSlice name; - SerialCompressionType type; - }; - - // clang-format off -#define SLANG_SERIAL_BINARY_PAIR(type, name) \ - {UnownedStringSlice::fromLiteral(#name), SerialCompressionType::type}, - // clang-format on - - static const Pair s_pairs[] = {SLANG_SERIAL_BINARY_COMPRESSION_TYPE(SLANG_SERIAL_BINARY_PAIR)}; - - for (const auto& pair : s_pairs) - { - if (pair.name == text) - { - outType = pair.type; - return SLANG_OK; - } - } - return SLANG_FAIL; -} + Bin::ArrayHeader header; + SLANG_RETURN_ON_FAIL(read.read(header)); + const size_t payloadSize = header.numEntries * typeSize; + SLANG_ASSERT(payloadSize == read.getRemainingSize()); + void* dst = listOut.setSize(header.numEntries); + ::memcpy(dst, read.getData(), payloadSize); -/* static */ UnownedStringSlice SerialParseUtil::getText(SerialCompressionType type) -{ -#define SLANG_SERIAL_BINARY_CASE(type, name) \ - case SerialCompressionType::type: \ - return UnownedStringSlice::fromLiteral(#name); - switch (type) - { - SLANG_SERIAL_BINARY_COMPRESSION_TYPE(SLANG_SERIAL_BINARY_CASE) - default: - break; - } - SLANG_ASSERT(!"Unknown compression type"); - return UnownedStringSlice::fromLiteral("unknown"); + return SLANG_OK; } - } // namespace Slang |
